1

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

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

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

4

2 回答 2

1

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

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

但是,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'));
}

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

于 2012-06-20T16:23:36.787 回答
0

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

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

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

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

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

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

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

希望这可以帮助

于 2012-06-20T16:05:55.390 回答