CakePHP 2.1 - 模型关联 - Save&找

时间:2012-06-20 15:48:16

标签: cakephp model find associations save

在阅读了食谱和各种Q& A之后,我仍然在概念上对模型关联及其作用感到困惑。而且我希望有人可以帮助我理顺这一点。所以这是我的问题:

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

但CakePHP在保存新条目方面做得不是很正确吗?   示例:如果我创建一个新帖子,那么我必须指定user_id   手动相关用户的字段,CakePHP不会这样做   自动某种程度?

您必须指定用户的ID,然后执行保存,当您从具有指定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'));
}

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

答案 1 :(得分:0)

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

  

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

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

  

但CakePHP在保存新条目方面做得不是很正确吗?   示例:如果我创建一个新帖子,那么我必须指定user_id   手动相关用户的字段,CakePHP不会这样做   自动某种程度?

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

  

为什么有必要在保存时“提及”两种型号?   $ this-> Mentor-> Student->保存($ student)示例。这是一种保持的方式   跟踪双向关联??

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

希望这有帮助