Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:模型->;型号->;查找()_Php_Cakephp_Cakephp 2.0_Cakephp 2.1 - Fatal编程技术网

CakePHP:模型->;型号->;查找()

CakePHP:模型->;型号->;查找(),php,cakephp,cakephp-2.0,cakephp-2.1,Php,Cakephp,Cakephp 2.0,Cakephp 2.1,这是一个非常基本的问题,但没有在中解释 在使用find方法之前,将多个模型组合在一起会发生什么 例如:$stuff=$this->Article->User->find('all') 这与:$this->User->Article->find('all')有何不同 你能做两件以上的事吗$this->Book->Chapter->Author->find('all') 很明显,这与模型之间的关系有关,但我认为这些是在模型中定义的,所以我不清楚发生了什么。当您在模型上设置关联时。CakePHP在运行

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

在使用find方法之前,将多个模型组合在一起会发生什么

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

这与:
$this->User->Article->find('all')有何不同

你能做两件以上的事吗<代码>$this->Book->Chapter->Author->find('all')


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

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

class User extends AppModel
{
      public $hasMany = array('Document');
}

class Document extends AppModel
{
}
在上面的例子中<代码>用户
对象将包含名为
文档
的属性,但
文档
将不包含
用户

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.
     }
}
另外,请记住,属性的名称是关联的别名。不是模型的名称

class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document')
      );
}

class Document extends AppModel
{
}
这会将属性名称更改为
Paper

$this->User->Paper->find(..); // works as alias
在关联上使用别名允许您应用查找条件,以便它们生成不同的结果

class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document','conditions'=>array(....)),
           'Resume'=>array('className'=>'Document','conditions'=>array(....))
      );
}
这将为
User
这样的模型创建两个属性

$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias

但是,这些条件仅在对
用户
模型执行查找时适用。

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

class User extends AppModel
{
      public $hasMany = array('Document');
}

class Document extends AppModel
{
}
在上面的例子中<代码>用户
对象将包含名为
文档
的属性,但
文档
将不包含
用户

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.
     }
}
另外,请记住,属性的名称是关联的别名。不是模型的名称

class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document')
      );
}

class Document extends AppModel
{
}
这会将属性名称更改为
Paper

$this->User->Paper->find(..); // works as alias
在关联上使用别名允许您应用查找条件,以便它们生成不同的结果

class User extends AppModel
{
      public $hasMany = array(
           'Paper'=>array('className'=>'Document','conditions'=>array(....)),
           'Resume'=>array('className'=>'Document','conditions'=>array(....))
      );
}
这将为
User
这样的模型创建两个属性

$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias

但是,这些条件仅在对
用户
模型执行查找时适用。

这很有帮助,并解释了何时可以使用它。但我仍然不清楚它到底在做什么。换句话说,返回的数据是如何影响的?如果我具体问一下,可能会更清楚:搜索的是哪个模型?链中的最后一个?还是两者都在被搜查?
$this->User->Paper->find('all')
是否会返回所有文档?还是文档和用户?
$this->User->Document==$this->Document
为真。这两个对象是
文档
模型的同一实例。Cake将
文档
设置为
用户
的成员属性,以方便访问。在控制器中,您不必说
uses=array('User','Document')
。由于
用户
已经引用了
文档
。您也不必从
User
model内部调用
ClassRegistry::init('Document')
。@Emerson
$this->User->Document->find(…)
搜索
文档
模型。它是
User
或任何其他模型的对象属性并不重要<代码>文档模型是同一个实例,无论从何处获取。CakePHP中的所有模型都是singleton.Perfect。这就把它清理干净了。因此,如果我理解正确,那么像
contain
这样的查找选项并不关心上下文是
$this->Document->find()
还是
$this->Model->Document->find()
。我问这个问题是因为我完全陷入了一个类似的问题:这很有帮助,并解释了什么时候可以使用它。但我仍然不清楚它到底在做什么。换句话说,返回的数据是如何影响的?如果我具体问一下,可能会更清楚:搜索的是哪个模型?链中的最后一个?还是两者都在被搜查?
$this->User->Paper->find('all')
是否会返回所有文档?还是文档和用户?
$this->User->Document==$this->Document
为真。这两个对象是
文档
模型的同一实例。Cake将
文档
设置为
用户
的成员属性,以方便访问。在控制器中,您不必说
uses=array('User','Document')
。由于
用户
已经引用了
文档
。您也不必从
User
model内部调用
ClassRegistry::init('Document')
。@Emerson
$this->User->Document->find(…)
搜索
文档
模型。它是
User
或任何其他模型的对象属性并不重要<代码>文档模型是同一个实例,无论从何处获取。CakePHP中的所有模型都是singleton.Perfect。这就把它清理干净了。因此,如果我理解正确,那么像
contain
这样的查找选项并不关心上下文是
$this->Document->find()
还是
$this->Model->Document->find()
。我这样问是因为我完全陷入了一个类似的问题: