Laravel updateOrСоздать с композитным ключом - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть таблица, которая определена так:

 Schema::create('tableA', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('label_id')->unsigned();
            $table->date('date');
            $table->integer('value');
            $table->unique(['user_id','label_id','date']);
            $table->timestamps();
        });

В таблице используется составной ключ user_id, label_id и даты.

Я бы хотел обновить таблицу, используя метод Model :: updateOrCreate, таким образом:

 Model::updateOrCreate(
                [
                    'user_id' => $user_id,
                    'label_id' => $label_id,
                    'date' => $date,
                    'value' => $value,
                ]);

Но я получаю ошибку, если запускаю метод, когда строка с составным ключом уже существует, потому что кажется, что Laravel не работает с составными ключами.

Например, строка

[
user_id:2,
label_id:3,
date:'2019-04-04',
value: 44
]

не может быть обновлено с помощью

Model::updateOrCreate([
    user_id:2,
    label_id:3,
    date:'2019-04-04',
    value: 100
]);

Значит ли это, что нет способа использовать updateOrCreate, и мне нужно проверять каждую строку, если она существует, прежде чем пытаться добавить ее?

1 Ответ

3 голосов
/ 08 апреля 2019

Если вы хотите обновить строку на основе user_id, первый параметр updateOrCreate - это массив полей, которые вы хотите сопоставить, а второй содержит поля, которые должны обновляться. Итак, из того, что вы говорите, я считаю, что вы должны использовать это:

Model::updateOrCreate([
    user_id => 2,
    label_id => 3,
    date => new Carbon('2019-04-04')
],
[
    value => 100
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...