я использую 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
,
Я пытался:
:
нотация — не работает.Учитывая это, я, вероятно, здесь упускаю что-то очевидное. Любое подталкивание в правильном направлении очень ценится.
Я посмотрел на варианты, как raw_execute
Мне тоже не повезло.
Это не имеет особого значения, но все значения являются числовыми.
Если вы предпочитаете один запрос, 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
)
);
Других решений пока нет …