Search

検索したいワードを入力してください

2019年03月18日

Laravelのprimarykeyを任意に設定する方法

Laravelではmodel定義時にprimarykeyが自動判別されます。自動判別されたprimarykeyが利用したいテーブルの主キーでない場合、Laravelを使ったプログラミングの中で、任意に設定する必要があります。

Laravelのprimarykeyとは

Laravelでは、テーブルの主キーをprimarykeyと定義付けます。デフォルト状態では、idという名のカラムがあれば、そのカラムをprimarykeyとみなします。

Laravelでは、主キーを自動増分される整数値であると想定しているため、デフォルト状態では、数値型のカラムがprimarykeyとみなされます。文字型のカラムを主キーとする場合は、手動でprimarykey設定します。

LaravelのModelのprimarykeyをオンにする方法

Laravelによって、自分が意図する主キーとは別のカラムにprimarykey設定がされてしまう場合や、自動判別ではprimarykeyが設定されない場合は、手動で意図するカラムにprimarykeyを設定します。

手動でprimarykeyを設定する場合は、「$primaryKey」に該当するカラム名をセットします。以下は、手動で任意のprimarykeyを設定する方法をご紹介します。

$tableにはテーブル名を入れる

$tableメンバ変数を使って、primarykeyの指定まで行うことができます。以下のコード記述例を参考に、primarykeyを設定したいテーブルの名称とカラム名を設定し、実行してみましょう。

【コード記述例】
$table = "tbl_author";

コード記述例では、「tbl_author」というテーブルに定義を設定します。

$primaryKeyにはプライマリキーのカラム名を入れる

次にカラム名を$primarykeyメンバにセットします。

【コード記述例】
$primaryKey = 'author_id';

ここまでの記述で、tbl_authorテーブルのauthor_idカラムにprimarykeyが設定されたことにいなります。author_idが自動増分の整数値である場合は、primarykey設定はこれで完了します。

$incrementingにはauto increment型でない場合はfalse

主キーにしたいカラムのデータ型が、自動増分の整数値ではない場合は、もうひとつコードを記述する必要があります。「自動増分の整数値型のカラムではない」ことを明示する必要があります。$incrementingメンバを設定します。

【コード記述例】
$incrementing = false;

Laravelでは、主キーは自動増分の整数値型という前提があるため、このコードを記述しないとエラーが発生します。

$tableメンバ変数を使ってprimarykeyを設定する

$tableメンバ変数にテーブル名を設定したあと、$tableのオーバーライトを使ってprimarykeyを設定することもできます。

【コード記述例】
$table = "tbl_author";
$table->string('author',4)->primary();


ここで指定している「$table->string('author', 4)」というコードで、長さ指定のVARCHARカラムを示しています。

LaravelのEloquent ORMでprimarykeyを無効にする方法

実装していく中では、主キーの設定をしたくないテーブルも存在します。そのような場合は、primarykeyの設定を無効にする方法があります。

Eloquent ORMを使用する場合は、一般的に「Illuminate\Database\Eloquent\Model」を継承します。このクラスを継承した先で$primaryKeyメンバ変数にnullを設定すれば、primarykeyが無効になります。

Illuminate\Database\Eloquent\Modelを継承する

「Illuminate\Database\Eloquent\Model」の継承は、以下のようにコードを記述します。

【コード記述】
use Illuminate\Database\Eloquent\Model;
class SampleClass extends Model
{
}


SampleClass は、サンプルコードの中で、Modelクラスを継承するクラス名です。

継承先で$primaryKeyメンバ変数にnullを設定する

継承先のクラスで、$primarykeyメンバ変数にnullを設定します。コード記述は以下のようになります。

【コード記述】
class SampleClass extends Model
{
//プライマリーキー無効
protected $primaryKey = null;
}


Modelクラスを継承したSampleClass のメンバ変数「$primarykey」にnullをセットし、主キー設定を無効にします。

$incrementingメンバ変数にfalseを設定する

Modelクラスを継承したクラスの中で、primarykey無効化のコード記述の後、「主キーは自動増分の整数値カラムではない」とする設定も同時に記述しておきます。

【コード記述】
class SampleClass extends Model
{
//プライマリーキー無効
protected $primaryKey = null;

// AutoIncrement無効
public $incrementing = false;
}

primarykey設定で覚えておくべきこと

Laravelでprimarykeyの設定を任意に行うコード記述について、理解できたでしょうか。Laravelを使ううえでは、必ずといっていいほどぶつかる問題である、任意の主キー設定に対応するために、以下のメンバ変数をまとめて覚えておきましょう。

主キー設定において覚えておくべきメンバ変数

以下のコードは、主キー変更コードのテンプレートとして覚えておきましょう。

class SampleClass extends Model
{
protected $table = 'tbl_sample '; //①
protected $primaryKey = 'sample_id'; //②
public $incrementing = false; //③
}

覚えるべきコード使い方
① $table = 'tbl_sample '; 任意の主キーを設定したいテーブルを指定
② $primaryKey = 'sample_id'; 主キーとしたいカラムの名称
主キーを設定しない場合は、nullを設定する
③ $incrementing = false; 主キーが自動増分の整数値のカラムの場合は、記述不要。主キーを使わない($primarykeyにnullを設定)の場合も、この記述は必要

Laraveのprimarykeyの扱いをサンプルコードで再確認

ここまで任意でprimarykeyを設定する方法をご紹介しました。あらためて、デフォルトでmodelクラスを作成した場合と、任意でprimarykeyの設定を行うmodelを順を追って参照して、理解を深めましょう。

【サンプルコード】
namespace App;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
}

サンプルコードのModelクラスの確認

サンプルコードのクラスは、プライマリキー「id」を持つテーブル「author」を参照します。しかし、実際の業務の中では、Laravel標準のネーミング規則ではなく、独自の規則でテーブル定義を行う必要がある場合も多々あります。

Modelクラスで参照したいテーブルが「tbl_author」で、このテーブルの主キーが「author_name」という文字カラムの場合、このまま使うことはできません。

任意のテーブル名と主キーを使う

Eloquentでは、Laravelのネーミング規則とは違う、任意のテーブルや主キーへの紐づけができます。ここまで見てきたprimarykey関連の設定をここで行ってみます。

サンプルコードで想定している主キーは、文字型のカラムです。Laravel標準の「id」カラムではなく、「author_name」を主キーに設定します。テーブルも「tbl_author」を参照します。

Modelクラスに任意の主キーを設定する

ここまでの条件をコードに反映させると、以下のようになります。

amespace App;
use Illuminate\Database\Eloquent\Model;
class Authorextends Model
{
protected $table = 'tbl_author';
protected $primaryKey = 'author_name';
public $incrementing = false;
}

確実に覚えておくべきポイント

サンプルコードでは、任意のテーブル名を設定し、primarykeyとなるカラム名を設定しています。その後、$incrementingの設定を行っています。primarykeyの設定を行う際は、必ず$incrementingの設定までをセットで覚えておきましょう。

$incrementingは、任意の主キーを設定する場合は、ほぼ必須ともいえます。任意の主キーが自動増分整数値の場合のみ不要となります。

覚えてしまえば簡単なprimarykeyの扱い

データベースを扱っていると、主キーでないカラムを主キーとして扱われてしまったり、逆に主キーとして扱いたいカラムが主キーとしてみなされなかったり、主キーがらみで修正が必要となることが多々あります。

Laravelであれば$primarykeyや$tableといったメンバ変数を使って、簡単に対応することが可能です。しっかりとprimarykeyの手動設定について、一連の流れを理解しておきましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related