Ändern Sie den Standardprimärschlüssel in Eloquent

90

Kann ich den Primärschlüssel des eloquenten Modells ändern?

Ich möchte zum Beispiel den Primärschlüssel admin_idanstelle von 'id' setzen.

Ich weiß, dass ich den Tabellennamen für ein Modell wie ändern kann

protected $table = "admin";

Gibt es etwas Ähnliches für den Primärschlüssel?

Vuk Stanković
quelle

Antworten:

187

Ja

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
Phirschybar
quelle
15
Verwenden Sie für alle anderen, die auf diese Frage verweisen, eine der anderen Antworten. $primarykeysollte sein $primaryKey(Großbuchstabe K) und wird sonst nicht funktionieren.
Jeremy Harris
4
Was ist, wenn ich mehr als ein Feld als Primärschlüssel habe?
Bagusflyer
@bagusflyer Du machst Witze, oder? Mehr als ein Primärschlüssel in einer Datenbanktabelle?
Novica89
@bagusflyer Eloquent unterstützt keine zusammengesetzten Schlüssel, aber hier ist eine gute Problemumgehung, damit Sie $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922
Nur zu Ihrer Information, es sieht so aus, als müssten Sie in Laravel 5.4 keine eigene PK mehr einstellen, wenn diese mit dem Modellnamen übereinstimmt, den er für Sie hinzufügt (und ansonsten einen Fehler verursacht).
Mint
13
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

aber

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Beachten Sie den Buchstaben K (Großbuchstaben) in der Variablen $ primaryKey

user3186817
quelle
9

Wenn Sie einen zusammengesetzten Schlüssel (eine Zeichenfolge) verwenden möchten

Sie müssen sicherstellen, dass Sie public $incrementing = falsesonst festlegen , dass Laravel das Feld in eine Ganzzahl umwandelt0

class User extends Model {

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

}
Toby Mellor
quelle
Ich habe den Primärschlüssel als Spalte für eine Textzeichenfolge überschrieben - der Wert in der Auflistung war korrekt, aber wenn ich die Spalte als $ results-> primary_key referenzierte, wurde nur Null zurückgegeben, obwohl die Auflistung / das Array die richtige Zeichenfolge zeigte - dauerte eine Weile Verfolgen Sie es, als ich bemerkte, dass der primäre Schlüssel als INT und inkrementierbar im Objekt angezeigt wurde. Musste public $ incrementing = false setzen.
G-Man
7

Die Primärschlüsselvariable unterscheidet zwischen Groß- und Kleinschreibung und muss $primaryKeyfunktionieren.

Beispiel:

protected $primaryKey = 'your_primary_key_id';

Beispiel innerhalb einer Modellklasse:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}
Ajtrichards
quelle
1
Muss ich das $ fillable-Array noch hinzufügen?
Anis
1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Gemäß Laravel-Dokumentation:


Eloquent geht auch davon aus, dass jede Tabelle eine Primärschlüsselspalte mit dem Namen hat id. Sie können eine $primaryKeyEigenschaft definieren , um diese Konvention zu überschreiben.

Darüber hinaus geht Eloquent davon aus, dass der Primärschlüssel ein inkrementierender ganzzahliger Wert ist. Dies bedeutet, dass der Primärschlüssel standardmäßig automatisch in ein int umgewandelt wird. Wenn Sie einen nicht inkrementellen oder einen nicht numerischen Primärschlüssel verwenden möchten, müssen Sie die öffentliche $incrementingEigenschaft Ihres Modells auf false setzen.

Gammer
quelle
-3

Um einen Primärschlüssel zuzuweisen, sollten Sie ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Jay Momaya
quelle