Ответ 1
Вы можете попробовать установить public $incrementing = false;
на свою модель, поэтому красноречивый не ожидает, что ваш первичный ключ будет основным ключом автоинкремента.
У меня есть эта миграция:
Schema::create('provincias', function (Blueprint $table) {
$table->string('codigo', 2);
$table->string('nombre', 50);
$table->timestamp('creado');
$table->primary('codigo');
});
Это моя модель:
class Provincia extends Model
{
protected $primaryKey = 'codigo';
public $timestamps = false;
}
Я запускаю миграцию и сохраняю данные следующим образом:
$provincia = new Provincia;
$provincia->codigo = "BA";
$provincia->nombre = "Buenos Aires";
$provincia->save();
Проблема в том, что когда я получаю все и сбрасываю:
$provincias = Provincia::all();
return $provincias;
Первичный ключ "codigo" всегда равен 0, даже когда я проверяю таблицу базы данных и имеет правильное значение:
{
codigo: 0,
nombre: "Buenos Aires",
creado: "2015-12-24 21:00:24"
}
Вы можете попробовать установить public $incrementing = false;
на свою модель, поэтому красноречивый не ожидает, что ваш первичный ключ будет основным ключом автоинкремента.
Вы также можете установить тип первичного ключа:
protected $keyType = 'string';
public $incrementing = false;
Важная заметка. Вы должны добавить вторую строку. $incrementing = false
. Если вы этого не сделаете, ключ будет 0 после вызова save()
для вашей модели.