Laravel Eloquent без первичного ключа - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы обновить старую таблицу с составным первичным ключом.Для генерации полного запроса на обновление, такого как:

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);

1 Ответ

0 голосов
/ 20 декабря 2018

Не загружать модель, обновите ее непосредственно в базе данных:

Foo::where('pk1', $foo)
    ->where('pk2', $bar)
    ->update(['column' => 42]);
...