如何使用CakePHP更新表中项的单个属性

时间:2016-07-21 15:36:29

标签: cakephp

我正在尝试更新保存在数据库中的用户的一条信息,而cakephp接受每个属性的值数组,但我没有其他属性的值,cakephp不会更新该行因为它期望在行中找到所有值。

4 个答案:

答案 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();
  

http://book.cakephp.org/3.0/en/orm/query-builder.html

  

第二种方式:使用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