Могу ли я иметь два условия, которые должны быть выполнены при вызове updateOrInsert? - PullRequest
0 голосов
/ 13 мая 2019

Из чтения Документации Laravel Я знаю, что updateOrInsert принимает два аргумента, первый из которых представляет собой массив условий. Этот массив сравнивается один за другим, а не все сразу - т. Е. С учетом массива ['name' => 'John', 'email' => 'contact@example.com'] он сначала проверит строку (и) с name == 'John', а затем, если он не находит, он ищет ряд (ы) с email == 'contact@example.com'.

Я хочу иметь два условия, которые оба должны быть выполнены - то есть он будет обновлять строки только в том случае, если он имеет name == 'John'ANDemail == 'contact@example.com'.

Есть ли хороший способ сделать это с помощью функции updateOrInsert, или мне нужно использовать оператор if и дополнительный вызов для проверки обоих условий?

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Да, вы можете сделать это так, что уже есть в документации

DB::table('users')
    ->updateOrInsert(
        ['email' => 'john@example.com', 'name' => 'John'],
        ['votes' => '2']
    );

Он проверит email == 'john@example.com' и name == 'john', затем обновит votes=2.

0 голосов
/ 13 мая 2019

updateOrInsert должен вести себя так, как вы бы хотели, чтобы он вел себя. Первый аргумент, который он принимает, - это массив условий, связанных между собой. Второй параметр - это массив для объединения условий и обновления любой сопоставленной записи.

    /**
     * Insert or update a record matching the attributes, and fill it with values.
     *
     * @param  array  $attributes
     * @param  array  $values
     * @return bool
     */
    public function updateOrInsert(array $attributes, array $values = [])
    {
        if (! $this->where($attributes)->exists()) {
            return $this->insert(array_merge($attributes, $values));
        }
        if (empty($values)) {
            return true;
        }
        return (bool) $this->take(1)->update($values);
    }

Код от https://github.com/laravel/framework/blob/bc31b3b22c44fcc797ad4e5a6f95f5bccdd63acc/src/Illuminate/Database/Query/Builder.php#L2699

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...