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では使用者が柔軟な設定を行うことが可能です。