Я хочу обновить старую таблицу с составным первичным ключом. Чтобы сгенерировать полный запрос на обновление, например:
UPDATE foos SET (...) WHERE pk1 = ? AND pk2 = ?;
Вместо этого Eloquent пытается сделать следующее, что приводит к массовому обновлению:
UPDATE foos SET (...) WHERE pk1 = ?;
Я установил атрибут первичного ключа на null, как показано в Google:
class Foo extends Model {
protected $guarded = [];
protected $primaryKey = null;
public $incrementing = false;
public $timestamps = false;
}
Но я получаю такую ошибку:
Illuminate\Database\QueryException: SQLSTATE[42S22]:
Column not found: 1054 Unknown column '' in 'where clause'
(SQL: update `previews` set `preview_id` = 1805 where `` is null) in
./vendor/illuminate/database/Connection.php on line 664
Я полагаю, что это не поддерживаемая функция Eloquent, так как я могу сгенерировать свой запрос update?
Мой запрос на обновление был:
$p = Foo
::where('pk1', $foo)
->where('pk2', $bar)
->first();
$p->update('column', 42);
@JonasStaudenmeir Я обновил свой вопрос






Не загружайте модель, обновите ее прямо в базе данных:
Foo::where('pk1', $foo)
->where('pk2', $bar)
->update(['column' => 42]);
Да, это обходной путь, но он не решает такие запросы, как updateOrCreate, который сначала выбирает модель.
Laravel не поддерживает составные первичные ключи.
Какой у вас запрос
UPDATE?