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
    )
);
Другие вопросы по тегам