【问题标题】:Cakephp 3 table updateAll using arrayCakephp 3 table updateAll使用数组
【发布时间】:2015-07-16 20:00:25
【问题描述】:

Cakephp 2 的模型updateAll 中,我们使用数组作为条件。但这不起作用:

$data=array(12, 22, 44);
TableRegistry::get('Foobar')->updateAll(
   array("checked" => 1),
   array("user_id" => $data) 
 );

这在 Cakephp 3 的 updateAll 中是不可能的吗?

这适用于 cakephp 3:

$data=12;
TableRegistry::get('Foobar')->updateAll(
   array("checked" => 1),
   array("user_id" => $data) 
 );

关于API docs$conditions定义如下:

updateAll( array $fields , mixed $conditions )

array $fields
A hash of field => new value.

mixed $conditions
Conditions to be used, accepts anything Query::where() can take.

编辑:
如果蛋糕效果很好,我犯了一个错误。我怎样才能理解原因?因为当条件为整数时,代码运行良好。

编辑2: 这也很有效:

 $data=array(12, 22, 44);
 ConnectionManager::get('default')->query('UPDATE foobars SET checked=1 
     WHERE user_id IN ('.implode(",",$data).')')->execute();

【问题讨论】:

  • 函数调用中缺少第二个参数
  • 对不起,我听不懂。你是说 updateAll 函数吗?
  • stackoverflow.com/questions/26887511/where-in-clause 我希望您知道您的原始查询很容易受到 SQL 注入,以防 $data 成为用户输入!
  • 谢谢ndm。是的,这就是为什么我需要创建一个 cakephp 类型的查询,而不是一个原始查询。我想问题是缺少 IN 关键字。我在 orm 迁移说明中看不到它。 book.cakephp.org/3.0/en/appendices/orm-migration.html 另外,我很乐意接受您的回复作为对这个问题的回答。

标签: php cakephp cakephp-3.0


【解决方案1】:

【讨论】:

  • 是否有一个测试用例检查 updateAll,数组条件有一个键和多个值? github.com/cakephp/cakephp/…
  • 好像没有……你的直觉是怎么说的?您将如何使用多个set 和多个条件?
  • 我更新了问题,您可以从edit2 中看到,Connection->query() 适用于这种情况。我想我使用updateAll 方法犯了一个错误。但尚未找到原因。
【解决方案2】:

讨论有点晚了,但由于我遇到了类似的问题,使用类似 id in array 条件,这就是现在在 Cakephp 3 上完成的方式。

//using the same example
$data=array(12, 22, 44);

TableRegistry::get('Foobar')->updateAll(
   ["checked" => 1],
   ["user_id IN " => $data] //mind the IN on the condition
);

这是docs 的另一种方式,针对示例进行了更新

$articles = TableRegistry::get('Articles');
$data=array(12, 22, 44);

$query = $articles->query();
$query->update()
    ->set(['checked' => true])
    ->where(['user_id IN' => $data])
    ->execute();

希望对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2013-06-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多