首页 文章

CakePHP 2.1 - 模型关联 - 保存和查找

提问于
浏览
1

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

据我所知,模型关联有助于阅读/查找相关数据 . 因此,如果我加载用户,那么该用户的所有帖子也将被加载?但CakePHP是否真的不会以某种方式自动完成它?手动我的意思是在这个答案中明确定义mentor_id:CakePHP model associations table w/data and new table

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

2 回答

  • 0

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

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

    但是,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

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

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

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

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

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

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

    这是因为你_1182422的依赖关系(再次取决于你如何 Build 关系),所以你需要明确说出来 . 其他方法是导入StudenController(根据您的示例)和(after constructing the classes)调用save方法 $studentController->Student->save($student)

    希望这可以帮助

相关问题