Laravel Eloquent без первичного ключа

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

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

Какой у вас запрос UPDATE?

Jonas Staudenmeir 20.12.2018 16:13

@JonasStaudenmeir Я обновил свой вопрос

nowox 20.12.2018 16:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
536
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Да, это обходной путь, но он не решает такие запросы, как updateOrCreate, который сначала выбирает модель.

nowox 20.12.2018 16:25

Laravel не поддерживает составные первичные ключи.

Jonas Staudenmeir 20.12.2018 16:32

Другие вопросы по теме