Попытка вставить и обновить как в одном запросе, но не работает - PullRequest
1 голос
/ 22 января 2020

Я попробовал оба insert и update в одном запросе, но не получил вывод.

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

Как мне выполнить запрос, который будет работать для обоих.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

В laravel функция updateOrInsert вставляет или обновляет запись, соответствующую атрибутам, и заполняет ее значениями.

Например:

$ attribute = ['email' => 'john@example.com ',' name '=>' John '];

$ values ​​= [' email '=>' john@example.com ',' name '=>' John ',' голосования '=>' 2 '];

DB :: table (' имя таблицы ') -> updateOrInsert ($ attribute, $ values);

Здесь с $ attribute проверяется, существует строка или нет , если существует, он обновит строку с $ values, а если она не существует, он вставит $ values.

0 голосов
/ 22 января 2020

Нельзя обновлять и вставлять в один запрос, потому что это разные вещи. Sql запрос на обновление работает с предложением where, например, где id = 3 обновляет, где некоторый столбец строки с идентификатором, равным 3. https://www.w3schools.com/sql/sql_update.asp

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Но запрос на вставку предназначен для вставка записей в базу данных.

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

А Вы используете Laravel Eloquent.

$update = DB::table('some_table')->where('some_colname', 'some_value')->update([...]);
$insert = DB::table('some_table')->insert([...]);

https://laravel.com/docs/6.x/queries

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