Cakephp 如何从控制器访问相关表字段?

Cakephp 如何从控制器访问相关表字段?,cakephp,model,controller,find,cakephp-2.1,Cakephp,Model,Controller,Find,Cakephp 2.1,我试图从我的控制器中获取数据库的数组结构及其一些字段。 我需要的字段是:Document.id、Document.name、Document.submission\u date和Requester.name,它与:Requester.id=Document.Requester\u id连接 在我的控制器中: 方法A: $documents = $this->Document->find('list', array('fields' => array('Document.name

我试图从我的控制器中获取数据库的数组结构及其一些字段。 我需要的字段是:Document.id、Document.name、Document.submission\u date和Requester.name,它与:Requester.id=Document.Requester\u id连接

在我的控制器中:

方法A:

$documents = $this->Document->find('list', array('fields' => array('Document.name', 'Requester.name', 'Document.submission_date')));
似乎找不到“Requester.name”

方法B:

$documents = $this->Document->find('list', array('fields' => array('Document.name', 'Requester.name', 'Document.submission_date'), 'recursive' => 0));
给我:

    array(
        '2012-08-17' => array(
            'Document_A' => 'Requester_Z'
        ),
        '2012-08-05' => array(
            'Document_B' => 'Requester_Y'
        ),
        '2012-07-09' => array(
            'Document_C' => 'Requester_X'
        )
    )
但我需要它的格式:

    array(
        (int) 0 => array(
            'id' => '16'
            'submission_date' => '2012-08-17'
            'name' => 'Document_A',
            'requester_name' => 'Requester_Z'
        ),
        (int) 1 => array(
            'id' => '41'
            'submission_date' => '2012-08-05'
            'name' => 'Document_B',
            'requester_name' => 'Requester_Y'
        ),
        (int) 2 => array(
            'id' => '213'       
            'submission_date' => '2012-07-09'
            'name' => 'Document_C',
            'requester_name' => 'Requester_X'
        ),
    )
在阅读了2.0 CakeBook和StackOverflow之后,我似乎无法理解它。。。
如果有任何帮助,我们将不胜感激?抱歉-我仍然是一个使用CakePHP的n00b(但到目前为止我真的很喜欢它!)谢谢

您需要执行
find('all')
而不是
find('list')
,并且您可以像以前一样使用
字段
键来限制返回的信息量

它不会完全按照您需要的数据返回,每个字段都将位于其所属模型的键中-如果您确实需要该格式的字段,则可以使用虚拟字段、自定义查找或afterFind回调来修改数据


查找列表通常用于
id=>label
格式化数组。

您需要执行
Find('all')
而不是
Find('list')
,并且您可以像以前一样使用
fields
键来限制返回的信息量

它不会完全按照您需要的数据返回,每个字段都将位于其所属模型的键中-如果您确实需要该格式的字段,则可以使用虚拟字段、自定义查找或afterFind回调来修改数据

查找列表通常用于
id=>label
格式化数组。

您可以尝试以下方法:

$documents = $this
                ->Document-
                >find('all', 
                        array(
                            'fields' => array('Document.name', 'Requester.name', 'Document.submission_date'),
                            'joins' => array(
                                'table' => 'requesters',
                                'alias' => 'Requester',
                                'type' => 'left',
                                'conditions' => array('Requester.id = Document.requester_id')
                            )
                        )   
                    );
您可以尝试以下方法:

$documents = $this
                ->Document-
                >find('all', 
                        array(
                            'fields' => array('Document.name', 'Requester.name', 'Document.submission_date'),
                            'joins' => array(
                                'table' => 'requesters',
                                'alias' => 'Requester',
                                'type' => 'left',
                                'conditions' => array('Requester.id = Document.requester_id')
                            )
                        )   
                    );

实际上,键可以是(甚至可能是首选)id字段。在这种情况下,还有什么更好的方法呢?另外,我尝试了$documents=$this->Document->find('all',array('fields'=>array('Document.name','Requester.name','Document.submission_date'));$documents是空的-我不明白为什么…实际上,键可以是(甚至可能是首选)id字段。在这种情况下,还有什么更好的方法呢?另外,我尝试了$documents=$this->Document->find('all',array('fields'=>array('Document.name','Requester.name','Document.submission_date'));$documents是空的-我不明白为什么。。。