raw_query — обновить несколько столбцов — не работает с Idiorm

я использую Idiorm — очень упрощенный ORM. Я пытаюсь обновить несколько строк в одном запросе. Идиорм не поддерживает это, поэтому я остаюсь с n запросы или raw_query заявление.

Я выбираю последнее.

Тем не менее, я не могу заставить его работать. Они сами по себе не очень сложны:

UPDATE products
SET discount_green = some_value
WHERE category_id = some_other_value
AND discount_green != yet_another_value
AND has_double_discount != 1

В синтаксисе Idiorm это будет выглядеть так:

ORM::for_table('products')
->raw_query(
"UPDATE products
SET discount_green = :some_value
WHERE category_id = :some_other_value
AND discount_green != :yet_another_value
AND has_double_discount != 1",

array(
'some_value' => $some_value,
'some_other_value' => $some_other_value,
'yet_another_value' => $yet_another_value,
)
);

for_table парам вполне может быть NULL,

Я пытался:

  1. Простое выполнение запроса без привязки параметров, как в целом полном запросе со статическими параметрами — не сработало
  2. Использование без ORM — работает нормально.
  3. Использование вопросительных знаков вместо : нотация — не работает.

Учитывая это, я, вероятно, здесь упускаю что-то очевидное. Любое подталкивание в правильном направлении очень ценится.

Я посмотрел на варианты, как raw_executeМне тоже не повезло.

Это не имеет особого значения, но все значения являются числовыми.

1

Решение

Если вы предпочитаете один запрос, raw_execute это путь. Вы могли бы сделать что-то вроде следующего.

ORM::raw_execute("UPDATE products " .
"SET discount_green = :some_value  " .
"WHERE category_id = :some_other_value " .
"AND discount_green != :yet_another_value  " .
"AND has_double_discount != 1",
array (
"some_value" => $some_value,
"some_other_value" => $some_other_value,
"yet_another_value" => $yet_another_value
)
);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]