【问题标题】:CakePhp load model in other model and modify its dataCakePhp 在其他模型中加载模型并修改其数据
【发布时间】:2013-10-08 20:14:25
【问题描述】:

我有 Comment 模型和 Video 模型与 belongsTo 和 hasMany 关系相连。我需要在评论控制器中(在一个动作中)加载连接的视频,更改其一个属性,然后保存评论和视频。我知道如何更改评论模型,但我无法以任何方式更改视频模型。

这是我的功能:

    $this->Comment->id = $id;
    if($this->Comment->exists()){
        $this->loadModel('Comment');
        $this->Comment->set('accepted', 1);
        if($this->Comment->save()){
            $this->Session->setFlash('Comment accepted');
            //HOW TO CHANGE ATTR OF VIDEO
            //in $this->Comment->video_id there is NULL
        }
        else
            $this->Session->setFlash('Can't accept comment');

        $this->redirect($this->request->referer());
    }
    else{
        throw new NotFoundException(__('Invalid comment'));
    }

你们能帮帮我吗?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    两件事:

    首先,您根本不需要调用它:

    $this->loadModel('Comment');
    

    就在您调用$this->loadModel('Comment'); 的行上方,有一行写着$this->Comment->id。 $this->Comment 是您的 cmets 模型的一个实例。在 Cake 中,每个控制器都有一个对应模型的实例,可通过$this->ModelName 访问。

    其次,您的 cmets 模型将反过来拥有您的视频模型的实例。因此,您的视频模型已经可以通过您的 cmets 控制器访问,地址为$this->Comment->Video

    因此,要修改视频模型,您首先必须获取评论的 video_id,然后执行以下操作:

    $this->Comment->Video->id = $videoId;
    $this->Comment->Video->set('accepted', 1);
    $this->Comment->Video->save()
    

    【讨论】:

    • 但是如何从视频中获取数据。我需要得到现值,修改它并保存它。当我这样做时: $this->Comment->Video->id = $videoId;并且视频不存在它是在数据库中创建的(所有属性为空)
    • 您已经获得了一个现值,对其进行修改并将其保存以供评论使用——因此您只需对视频使用完全相同的逻辑,只需通过 $this->Comment->Video 访问它, 而不是 $this->Comment
    • $this->Comment->video_id 为空。 $this->Comment->Video->rate 为空。我找到了将评论读取为数组、获取 video_id、读取视频、读取值并修改它的解决方案
    • 您会认为 $this->Comment->video_id 应该为 null - 这不是获取该属性的有效方式。你应该在book.cakephp.org/2.0/en/models/retrieving-your-data.html 和book.cakephp.org/2.0/en/models/saving-your-data.html 阅读完整的文档,它会让你很好地了解所有东西是如何组合在一起的。
    • 你不需要获取记录的值来修改它。只需关注 @joshua.paling,您将获得带有 $videoId 的记录,使用 ->set('field', 'value) 进行修改,然后 ->save() 保存更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    相关资源
    最近更新 更多