首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP:模型->模型->查找()

CakePHP:模型->模型->查找()
EN

Stack Overflow用户
提问于 2013-06-06 03:12:19
回答 1查看 905关注 0票数 1

这是一个非常基本的问题,但在the book中没有解释。

在find方法之前,当您将多个模型组合在一起时,究竟会发生什么情况?

例如:$stuff = $this->Article->User->find('all');

这与:$this->User->Article->find('all');有什么不同?

你能做两个以上吗?$this->Book->Chapter->Author->find('all');

很明显,这与模型之间的关系有关,但我认为这些关系是在模型中定义的,所以我不清楚发生了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 03:23:13

在模型上设置关联时。CakePHP在运行时将其实例化,并将其设置为该模型的对象属性。

代码语言:javascript
复制
class User extends AppModel
{
      public $hasMany = array('Document');
}

class Document extends AppModel
{
}

在上面的例子中。User对象将包含一个名为Document的属性,但Document将不包含User

代码语言:javascript
复制
class UsersController extends AppController
{
     public $uses = array('User');

     public function index()
     {
           $this->User-find(...); // works
           $this->User->Document->find(..); // works, because of the hasMany

           $document = ClassRegistry::init('Document');
           $document->User->find(...); // does not work, not associated to User.
     }
}

另外,请记住,属性的名称是关联的别名。而不是模型的名称。

代码语言:javascript
复制
class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document')
      );
}

class Document extends AppModel
{
}

这会将属性名称更改为Paper

代码语言:javascript
复制
$this->User->Paper->find(..); // works as alias

在关联上使用别名允许您应用查找条件,以便它们生成不同的结果。

代码语言:javascript
复制
class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document','conditions'=>array(....)),
           'Resume'=>array('className'=>'Document','conditions'=>array(....))
      );
}

这将为User模型创建两个属性,如下所示。

代码语言:javascript
复制
$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias

但是,只有在User模型上执行查找时,这些条件才适用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16947960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档