【问题标题】:Cakephp 3: update multiple columns at one time using save()Cakephp 3:使用 save() 一次更新多个列
【发布时间】:2018-08-10 21:11:44
【问题描述】:

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

从书上

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 数组的键与我要更新的表列完全相同。

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

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

    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 获得标准的蛋糕方法:https://book.cakephp.org/3.0/en/bake/usage.html

    【讨论】:

    • @为什么要使用Users,因为我们已经在说 $this 这意味着同一张桌子还是有必要的?还有这个补丁有什么作用?在文档中只是说这可以验证数据。
    • 其实我在遵循 MVC 模式的所有模型中的数据库相关的东西。这不是标准吗?
    • 因为这种方法应该在控制器上,而不是在表中。
    • 是的,所以你从控制器调用补丁实体,所以用户表处理保存。
    • 另见your own question from yesterday @arilia 还告诉你有关修补的信息。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多