Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.03.2014 13:15:13

Ruzarh
Откуда: СПБ
Сообщений: 27

DB: insert on duplicate key update

Добрый день. Как можно сделать запрос через DB:: INSERT ON DUPLICATE KEY UPDATE. Через Model мне совсем не подходит. Модель слишком раздутая и сложная получится. Вчера смотрел и смотрел, так и не получилось ничего сваять((

Изменено Ruzarh (21.03.2014 13:16:12)

Не в сети

#2 21.03.2014 13:48:40

Ruzarh
Откуда: СПБ
Сообщений: 27

Re: DB: insert on duplicate key update

сделал вот так

$table = 'table';
$fields = 'field_1, field_2';
$insertStr = '(1,2), (2,3), (3,4)'

DB::insert("INSERT INTO `{$table}` ({$fields}) VALUES {$insertStr} ON DUPLICATE KEY UPDATE `count`=`count` + VALUES(`count`)");

но чет мне подсказывает, что это не идеальное решение (((

Не в сети

#3 21.03.2014 15:13:21

Re: DB: insert on duplicate key update

ON DUPLICATE KEY — расширение MySQL, поэтому без сырого запроса тут не обойтись. Но ты вставляешь параметры прямо в строку, что не есть хорошо — передавай их привязкой: док.

Не в сети

#4 21.03.2014 15:49:37

Ruzarh
Откуда: СПБ
Сообщений: 27

Re: DB: insert on duplicate key update

Я бы рад, но как?

$values = [
 [],
 [],
 []
];

DB::insert('insert into users (id, name) values (?, ?), (?, ?), (?, ?)', $values);

как же мне заполнять values (?, ?), (?, ?), (?, ?) они динамические

Или каждый раз формировать стек вот этих значений ручками? Или может есть другое решение? В той доке ни слова об этом нет((

Изменено Ruzarh (21.03.2014 15:55:18)

Не в сети

#5 21.03.2014 16:11:01

Re: DB: insert on duplicate key update

  1. Или каждый раз формировать стек вот этих значений ручками?

Да, именно, точно так же как это делается для IN (?, ?, ...).

Не в сети

#6 21.03.2014 16:37:02

Ruzarh
Откуда: СПБ
Сообщений: 27

Re: DB: insert on duplicate key update

На самом деле это спорно. Вернее я бы поспорил что это удобно. 

$petIds = array(1,2,3);
...
 ->where('pet_id IN (?)', $petIds); 

правда обертка над зендовой оберткой, но  вполне себя оправдывает.

IN (?, ?, ...) а вот такой стайл совсем себя не оправдывает. Получается куча шаверма кода перед запросом. Если честно то вот такими штуками ларавель начал подрывать к себе любовь в моих глазах((

Но спасибо огромное!

Не в сети

#7 22.03.2014 03:15:02

Re: DB: insert on duplicate key update

Я и не говорил, что это удобно. На мой взгляд это ограничение (My)SQL, Laravel просто не дает какой-то надстройки, чтобы облегчить работу с подобными стучаями.

Не в сети

Подвал раздела