Метод уничтожения Laravel с массивом пользовательских PK - PullRequest
0 голосов
/ 25 июня 2018

В официальной документации я вижу метод destroy, где вы можете поместить список первичных ключей, и он удаляет все данные в списке.

ModelName::destroy([1,2,3]);

Но что, если у нас есть пользовательский ПК? Я пытался сделать это с полем с именем code, которое является строкой, но оно говорит:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause'  (SQL: select * from `paises` where `id` in ())

Есть ли способ сообщить Laravel, что первичный ключ не называется id?

Что-то вроде

ModelName::destroy(['AL', 'ES', 'FR'], 'code');

1 Ответ

0 голосов
/ 25 июня 2018

Из документации :

Eloquent также предполагает, что в каждой таблице есть столбец первичного ключа с именем id.Вы можете определить защищенное свойство $ primaryKey, чтобы переопределить это соглашение.

Итак, в вашей модели:

class User extends Model
{

    protected $primaryKey = 'yourPrimaryKey';
}

Так как кажется, что вы используете PK на основе строки,Следующий абзац в документации также имеет значение.

Кроме того, Eloquent предполагает, что первичный ключ является возрастающим целочисленным значением, что означает, что по умолчанию первичный ключ будет приведен к int автоматически.Если вы хотите использовать неинкрементный или нечисловой первичный ключ, вы должны установить для открытого свойства $ incrementing в вашей модели значение false.Если ваш первичный ключ не является целым числом, вы должны установить для защищенного свойства $ keyType вашей модели значение string.

Таким образом, ваша модель также должна включать:

protected $incrementing = false;
protected $keyType      = 'string';
...