Laravelでは、artisanコマンドでテーブルの定義を行い、作成をすることが多いと思います。
その際、公式の手順通りに行うと、テーブルのプライマリキーはUNSIGNED INTEGER型のカラム”id”になります。
同様に、Eloquent ORMモデルも、プライマリキー名やプライマリキーの型は、公式の手順に従うと、デフォルトの動作となります。
たとえば、
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { }
とStudentモデルクラスを定義した場合、
このクラスは、プライマリキー“id”を持つテーブル”students”を参照することになります。
とはいえ、実際の業務上、Laravel標準のルールではなく、独自のルールでテーブル定義を行う場面も多々あります。
Eloquentでは、参照テーブル、プライマリキーについても、使用者が自由に設定できるようになっています。
今回は、プライマリキーが文字列となる場合を考えてみましょう。
また、Laravel標準のカラム名”id”ではなく、他のものにしてみます。
例として、プライマリキー”student_id”を持つテーブル“tbl_student”について考えていきましょう。
このプライマリキー”student_id”は、”A00123″や”B98765″といった文字列をとります。
当然、文字列ですので、auto increment型ではありません。
この場合、以下のようにモデルクラス定義を行います。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $table = 'tbl_student'; protected $primaryKey = 'student_id'; public $incrementing = false; }
Illuminate\Database\Eloquent\Model クラスを継承するモデルクラスで、以下のプロパティを書き換えます。
・$table には、テーブル名
・$primaryKey には、プライマリキーのカラム名
・$incrementing には、auto increment型でない場合はfalse
このようにして、LaravelのEloquent ORMでは使用者が柔軟な設定を行うことが可能です。