raw_query - 更新多个列 - 不与Idiorm一起使用

时间:2015-06-05 12:17:35

标签: php mysql idiorm

我正在使用Idiorm - 一个非常简单的ORM。我试图在单个查询中更新多行。 Idiorm不支持​​这一点,所以我留下了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 param很可能是NULL

我试过了:

  1. 简单地执行查询而不用像使用静态参数的完整查询那样绑定参数 - 不起作用
  2. 不使用ORM - 工作正常。
  3. 使用问号代替:符号 - 不起作用。
  4. 话虽如此,我可能在这里遗漏了一些明显的东西。任何朝着正确方向的推动都非常感激。

    我已经研究过像raw_execute这样的选项,也没有多少运气。

    它并不特别重要,但所有值都是数字。

1 个答案:

答案 0 :(得分:0)

如果您更喜欢单个查询,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
    )
);