【问题标题】:CakePHP 2.1 - Model Associations - Save & FindCakePHP 2.1 - 模型关联 - 保存和查找
【发布时间】:2012-06-20 15:48:15
【问题描述】:

在这里阅读食谱和各种问答之后,我仍然对模型关联及其作用在概念上有些困惑。我希望有人可以帮助我解决这个问题。所以这是我的问题:

据我所知,模型关联有助于阅读/查找相关数据。那么如果我加载一个用户,那么该用户的所有帖子也会被加载吗?但是,CakePHP 在保存新条目方面真的没有做太多事情吗?例如:如果我创建一个新帖子,那么我必须手动为相关用户指定 user_id 字段,CakePHP 不会以某种方式自动执行吗?手动我的意思是在这个答案中明确定义导师 ID:CakePHP model associations table w/data and new table

为什么在保存时需要“提及”两个模型?例如 $this->Mentor->Student->save($student)。这是一种跟踪双向关联的方法吗??

【问题讨论】:

    标签: cakephp model find associations save


    【解决方案1】:

    如果我加载一个用户,那么该用户的所有帖子也会被加载?

    是的,CakePHP 将加载所有相关数据,除非您 unbindbind 模型或更改您正在使用的模型的递归属性。

    但是,CakePHP 真的没有为保存新条目做太多事情吗? 示例:如果我创建一个新帖子,那么我必须指定 user_id 手动输入相关用户的字段,CakePHP 不这样做 以某种方式自动?

    您必须为用户指定 ID,然后进行保存,当您从具有指定 ID 的模型保存时,它将处理其余部分。例如,假设您有一个 Post 和一个 User 模型,并且用户使用 Auth 登录:

      $this->request->data['Post']['user_id'] = $this->Auth->user('id');
      if ($this->Post->save($this->request->data)) {
        $this->Session->setFlash('Your post has been saved.');
        $this->redirect(array('action' => 'index'));
      }
    

    所以没有必要同时提及这两个模型,如果您同时提及这两个模型,您可以执行以下操作,再次以帖子和用户为例。

    $this->User->read(null, $this->Auth->user('id'));
    if ($this->User->Post->save($this->request->data)) {
      $this->Session->setFlash('Your post has been saved.');
      $this->redirect(array('action' => 'index'));
    }
    

    这等同于前一种情况,因为您正在使用用户数据加载用户模型并为该用户保存一个帖子。

    【讨论】:

      【解决方案2】:

      我假设您使用的是belongTo 关系,但我认为它可能是食谱中描述的任何类型

      如果我加载一个用户,那么该用户的所有帖子也会被加载?

      是的,如果您设置了正确的关系(belongsTo、hasA 等),Cake 会自动处理此问题

      但是,CakePHP 真的没有为保存新条目做太多事情吗? 示例:如果我创建一个新帖子,那么我必须指定 user_id 手动输入相关用户的字段,CakePHP 不这样做 以某种方式自动?

      我相信这是使用 saveAll, saveAssociated, etc. 方法处理的,但我还没有遇到使用它的场景

      为什么在保存时需要“提及”两个模型? 例如 $this->Mentor->Student->save($student)。有没有办法保持 跟踪双向关联??

      这是因为您要保存主模型及其依赖项(同样取决于您建立关系的方式),因此您需要明确说明。其他方法是导入 StudenController(根据您的示例)和 (after constructing the classes) 调用保存方法 $studentController->Student->save($student)

      希望对你有帮助

      【讨论】:

      • 谢谢,正如你所说, saveAll() 似乎解决了这个问题。我有点不熟悉你说的保存依赖是什么意思?我不仅使用 save() 保存在主模型中吗?我是否同时保存到两个模型?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多