2015-10-14 155 views
2

我在数据库中有多行。如何在单个查询中更新多行数据?

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

CakePHP 3如何实现?

+0

是否要获取或更新记录 – kannan

+0

UPDATE website_content_pages SET content = REPLACE(content,'b>','strong>');在sql中尝试这个查询这两个工作都不起作用cakephp 3.x – karthik

回答

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?

请仔细阅读,谢谢!

+1

为什么你回答自己的问题,就好像你不知道谁问这个问题的人? – AD7six

+0

@ AD7six嗨1st搜索了这个问题的答案,并从文档中得到了答案,它对我来说非常完美,所以我发布了我的问题的答案 – karthik

+0

回答你自己的问题是很好的(并鼓励)当自我回答是相当奇怪'我希望这对您的问题有用。请检查,谢谢!' – AD7six

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

+0

'通过从列的值中删除一个单词来更改特定列的值。“此答案中的updateAll调用不会这样做,或者说明它如何可能是改变做那。 – AD7six

+0

Sry无法正常工作 – karthik

+0

我已经修改了答案,以便它回答这个问题 - 将来如果它确实回答了问题,那么只写一个答案是一个更好的主意。感谢您在代码示例中使用空格 - 请保持该习惯(并修复您不存在的问题/答案)。 – AD7six