如何在单个查询中更新多行数据?

时间:2015-10-14 17:12:35

标签: javascript php mysql cakephp cakephp-3.0

我在数据库中有多行。

我需要根据特定条件收集所有行,并通过从列的值中删除一个单词来更改特定列的值。

如何使用CakePHP 3完成任务?

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

$model->updateAll(
        ['description' => "REPLACE (description, 's', 'a')"], // fields
        ['is_disabled' => 1] //condition
);

这将生成以下sql:

UPDATE 
    mytable
SET 
    description =  REPLACE (description, 's', 'a') 
WHERE
     is_disabled = 1

请注意,这会替换匹配字符串(' s'),它会出现在说明字段中的任何位置 - 即使在单词的中间。这通常会导致众所周知的clbuttic mistakes

答案 1 :(得分:0)

在控制器顶部添加“使用Cake \ Datasource \ ConnectionManager;”

$this->loadModel('Rewards');
$connection = ConnectionManager::get('default');
$results = $connection->execute("UPDATE rewards SET description =  REPLACE (description, 's', 'a') where is_disabled=1");

我在描述字段'wwss'中有值,现在字段替换为'wwaa'就像那样。

有关更多说明,请参阅此链接

http://book.cakephp.org/3.0/en/orm/database-basics.html

How can I use mySQL replace() to replace strings in multiple records?

请复习,谢谢!