我正在尝试更新保存在数据库中的用户的一条信息,而cakephp接受每个属性的值数组,但我没有其他属性的值,cakephp不会更新该行因为它期望在行中找到所有值。
答案 0 :(得分:0)
要更新模型中的单个属性,请使用set方法并传递仅更新的字段数组。 例如,您可以尝试这样的事情。
$this->Model->read(null, $id);
$this->Model->set(array(
'fieldname' => 'value',
));
$this->Model->save();
答案 1 :(得分:0)
应该工作
$this->ModelName->id = $id;
$this->ModelName->saveField('fieldname', 'New Value');
答案 2 :(得分:0)
第一种方法:使用query()创建一个新的Query对象:
$users = TableRegistry::get('Users');
$query = $users->query();
$query->update()
->set(['is_active' => true])
->where(['id' => $id])
->execute();
第二种方式:使用PatchEntity
在创建或合并数据到实体时使用fieldList()选项:
这将允许您只更新或插入您想要的字段
$user = $this->Users->get($id);
if ($this->request->is(['post', 'put'])) {
//assume $this->request->data Contains field as ['name' => 'myname', 'title' => 'Hacked!'];
$user = $this->Users->patchEntity($user, $this->request->data, [
'fieldList' => ['title']]);
// Only allow title to be changed
if ($this->Users->save($user)) {
$this->Flash->success(__('Your user has been updated.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Unable to update your user.'));
}
http://book.cakephp.org/3.0/en/orm/saving-data.html#changing-accessible-fields
http://book.cakephp.org/3.0/en/orm/query-builder.html#updating-data
答案 3 :(得分:0)
如果您使用的是cakephp 2.x,那么您可以使用
$this->ModelName->id = $id;
$this->ModelName->saveField('fieldName', 'new value');
如果您使用的是cakephp 3.x,则必须使用
$model = $this->ModelName->get($id);
$model = $this->ModelName->patchEntity($model,['fieldName'=>'new value'])
$this->ModelName->save($model);
OR
$model = $this->ModelName->get($id);
$model->fieldName = 'new value';
$this->ModelName->save($model);
有关详细信息,请参阅http://book.cakephp.org/3.0/en/orm/saving-data.html#updating-data