Змінити первинний ключ за замовчуванням у Eloquent


93

Чи можу я змінити первинний ключ моделі Eloquent?

Я хочу встановити первинний ключ, наприклад, admin_idзамість "id"?

Я знаю, що можу змінити назву таблиці на зразок моделі

protected $table = "admin";

Чи є щось подібне для первинного ключа?

Відповіді:


191

Так

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
Для тих, хто посилається на це питання, використовуйте одну з інших відповідей. $primarykeyмає бути $primaryKey(велика літера К) і інакше не працюватиме.
Jeremy Harris

4
Що робити, якщо я маю більше одного поля як первинний ключ?
Bagusflyer

@bagusflyer Ти жартуєш? Більше одного первинного ключа в одній таблиці бази даних?
Novica89

@bagusflyer Eloquent не підтримує складені клавіші, але ось хороший обхідний шлях, щоб ви могли мати $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

Просто FYI, схоже, у Laravel 5.4 вам більше не потрібно встановлювати свій власний ПК, якщо він такий самий, як назва моделі, оскільки він додає його для вас (і в іншому випадку буде помилковим)
Монетний двір

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

але

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

зверніть увагу на букву К (велика) на змінну $ primaryKey


10

Якщо ви хочете використовувати складений ключ (рядок)

Потрібно переконатися, що встановлено public $incrementing = falseінакше, laravel буде передавати поле цілому числу, даючи0

class User extends Model {

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

}

Я зробив перевизначення для primaryKey як текстовий рядок col - значення в колекції було правильним, але коли я посилався на col як $ results-> primary_key, воно повертало б лише нуль, хоча колекція / масив показували правильний рядок - знадобився деякий час, щоб відслідковуйте це, коли я помітив, що primaryKey відображається як INT та Incrementable в Object. Довелося встановити загальнодоступний приріст = false.
G-Man

7

Змінна первинного ключа чутлива до регістру і повинна $primaryKeyпрацювати.

Приклад:

protected $primaryKey = 'your_primary_key_id';

Приклад у класі Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
Чи все-таки мені потрібно додати до нього масив, який заповнюється $?
Аніс

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Відповідно до документації Laravel:


Красномовний також припустить, що кожна таблиця має стовпець первинного ключа з іменем id. Ви можете визначити $primaryKeyвластивість, щоб замінити цю конвенцію.

Крім того, Eloquent припускає, що первинний ключ - це ціле значення, що збільшується, що означає, що за замовчуванням первинний ключ буде автоматично переданий до int. Якщо ви хочете використовувати неінкрементний або нечисловий первинний ключ, ви повинні встановити загальнодоступне $incrementingвластивість у вашій моделі на false.


-3

Щоб призначити первинний ключ, слід ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.