2015-10-14 152 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