我试图从我的控制器获取数据库的数组结构和一些字段。 我想要的字段是:Document.id,Document.name,Document.submission_date和与之连接的Requester.name:Requester.id = Document.requester_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(但到目前为止真的非常喜欢!)谢谢!
答案 0 :(得分:2)
您需要执行find('all')
而不是find('list')
,并且可以使用fields
密钥来限制返回的信息量。
它不会完全按照你需要的数据返回,每个字段都在它所属的模型的键中 - 如果你真的需要它以这种格式你可以使用虚拟字段,自定义find或afterFind回调来修改数据。
查找列表通常用于id => label
格式化数组。
答案 1 :(得分:1)
你可以试试这个:
$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')
)
)
);