Cakephp 3:使用save()一次更新多个列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cakephp 3:使用save()一次更新多个列相关的知识,希望对你有一定的参考价值。

我正在按照书籍教程更新当前数据

从书中

use Cake\ORM\TableRegistry;

$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->get(12); // Return article with id 12

$article->title = 'Cakephp is THE best PHP framework!';
$articlesTable->save($article);

这更新了ID 12上的文章标题。但是,如果我必须更新6 7个字段,该怎么办?就像我想做的那样。

这是我的代码,它没有更新,除了我单独提到每个字段。

public function updateUser($user_data,$id){

        $user = $this->get($id);

        $user->first_name = $user_data['first_name'];
        $user->last_name = $user_data['last_name'];
        $this->save($user);
    } 

我的$user_data数组也有我要更新的表格列的精确键。

答案

使用补丁实体,它应该看起来像这样:

public function updateUser($user_data,$id){

    $user = $this->get($id);

    $user = $this->Users->patchEntity($user,$user_data);
    $this->save($user);
}

欲了解更多信息:https://book.cakephp.org/3.0/en/orm/saving-data.html#validation-and-patchentity

您的控制器可以从updateUser.ctp调用,因此请尝试将其用作所有更新操作的标准:

public function edit($id)
{
     $user = $this->Users->get($id);
     if ($this->request->is(['patch', 'post', 'put'])) {
         $user = $this->Users->patchEntity($user,$user_data);

         if ($this->Users->save($user)) {
            $this->Flash->success(__('The {0} has been saved.', 'User '));
            return $this->redirect(['action' => 'edit']);
        } else {
            $this->Flash->error(__('The {0} could not be saved. Please, try again.', 'User'));
        }
     }

     $this->set(compact('user'));
}

您可以使用Cake Bake:qazxsw poi获得标准蛋糕方法

以上是关于Cakephp 3:使用save()一次更新多个列的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 无法保存某个列

Cakephp 3每次请求都会更新会话

调试save()返回false CakePHP 3.0

cakephp:使用保存方法,我想在数据没有变化时更新修改时间

CakePHP 3:上传多个文件并将文件名保存在关联模型中?

CakePHP 从选择框更改中更新多个表单字段