如何更新模型的多行?
问题描述:
我想一次更新一个特定模型的多行,所以我有波纹管代码和数据结构。每当我尝试更新记录时,每次插入记录而不是更新。如何更新模型的多行?
在我的控制器function products($cat_id = null){
$products = $this->Products->find()->where(['category_id' => $cat_id]);
$productPatch = $this->Products->patchEntities($products, $this->request->data);
$this->Products->saveMany($productPatch); //Always creates new record
}
这里
是不同阵列中的数据,
In $products
[0] => Array
(
[id] => 13 //product_id
[category_id] => 17
[slug] => onScreen
[status_id] => 1
)
[1] => Array
(
[id] => 14
[category_id] => 17
[slug] => pdf
[status_id] => 1
)
In $this->request->data
[0] => Array
(
[id] => 13 //product_id
[category_id] => 17
[slug] => onScreen
[status_id] => 2 //Data changes here
)
[1] => Array
(
[id] => 14
[category_id] => 17
[slug] => pdf
[status_id] => 2 //Data changes here
)
答
可以使用updateAll()方法在批量更新数据:
$this->modelClass->updateAll(
['published' => true], // fields
['published' => false]); // conditions
' $ products'应该是一个实体数组......也是'debug($ productPatch)'来检查可能的问题。 – ndm
忘了提及$ products是一个实体数组,只有更好的可视性和数据格式,我通过转换成数组来打印代码。 @ndm –
为了更好地指导我,当我打印$ products时,我在每个数组中找到了id索引,但在patchEntities之后,我没有在数组中找到id,我知道这是问题,但无法理解导致此问题的原因: (@ndm –