Eloquentのデフォルトの主キーを変更する


92

Eloquentモデルの主キーを変更できますか?

たとえばadmin_id「id」の代わりに主キーを設定したいですか?

私はモデルのテーブル名を次のように変更できることを知っています

protected $table = "admin";

主キーに似たものはありますか?

回答:


190

はい

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
他の人がこの質問を参照している場合は、他の回答のいずれかを使用してください。$primarykeyする必要があります$primaryKey(大文字のK)と、そうでない場合は動作しません。
ジェレミーハリス

4
主キーとして複数のフィールドがある場合はどうなりますか?
Bagusflyer 2014年

@bagusflyer冗談ですよね?1つのデータベーステーブルに複数の主キーがありますか?
Novica89 2014年

@bagusflyer Eloquentは複合キーをサポートしていませんが、$primaryKey = array('key1', 'key1'); github.com
laravel / framework /

参考までに、Laravel 5.4ではモデル名と同じであれば、独自のPKを追加する必要があるため、独自のPKを設定する必要はありません(それ以外の場合はエラーになります)。
2017

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

だが

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

変数$ primaryKeyの文字K(大文字)に注意してください


9

複合キー(文字列)を使用する場合

あなたが設定を確認する必要がありますpublic $incrementing = false与え、laravelは整数にフィールドをキャストしますそうでない場合は0

class User extends Model {

    protected $primaryKey = 'my_string_key';
    public $incrementing = false;

}

primaryKeyをテキスト文字列colとしてオーバーライドしました-コレクションの値は正しかったのですが、colを$ results-> primary_keyとして参照すると、コレクション/配列が正しい文字列を示していても、0しか返しませんでした。 primaryKeyがオブジェクト内でINTおよびIncrementableとして表示されていることに気付いたときに、それを追跡します。public $ incrementing = falseを設定する必要がありました。
Gマン

7

主キー変数は大文字と小文字が区別され、機能する必要があります$primaryKey

例:

protected $primaryKey = 'your_primary_key_id';

Modelクラス内の例:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
$ fillable配列を追加する必要がありますか?
2016

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Laravelのドキュメントに従って:


Eloquentは、各テーブルにという名前の主キー列があると想定しますid$primaryKeyこの規則を上書きするプロパティを定義できます。

さらに、Eloquentは、主キーが増加する整数値であると想定しています。つまり、デフォルトでは、主キーは自動的にintにキャストされます。非増分または非数値の主キーを使用する場合$incrementingは、モデルのパブリックプロパティをfalseに設定する必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.