據我所知,無法獲取沒有任何用戶或公司數據的公司文件,但可以通過使用Containable behaviour來限制數據。例如,如果你想獲得屬於某個公司,在公司負責人的文件,你可以這樣做:
$users = $this->Company->User->find('all', array(
'conditions' => array('User.company_id' => $id),
'fields' => array('id', 'company_id'),
'contain' => array('File'),
));
結果($users
)將是這個樣子:
array(
0 => array(
'User' => array(
'company_id' => '75',
'id' => '51'
),
'File' => array(
0 => array(
'id' => '399',
'user_id' => '51',
...
),
1 => array(
'id' => '337',
'user_id' => '51',
...
)
...
)
)
1 => array(
'User' => array(
'company_id' => '75',
'id' => '65'
),
'File' => array(
0 => array(
'id' => '450',
'user_id' => '65',
...
),
...
)
)
)
你可以然後使用Hash utility獲取一組文件。
$files = Hash::extract($users, '{n}.File.{n}');
,這將給你這樣的事情:
array(
0 => array(
'id' => '399',
'user_id' => '51',
...
),
1 => array(
'id' => '337',
'user_id' => '51',
...
),
3 => array(
'id' => '450',
'user_id' => '65',
...
),
...
)
不要忘記啓用的行爲。我建議你在你的應用模型中添加以下行:
public $actsAs = array('Containable');
工程就像一個魅力。謝謝! – Lapidus
現在我能夠將用戶名連接到同一個數組中的文件嗎? – Lapidus
是的,Containable可以遞歸。 ('File')''包含'=> array('File'=> array('User'))或者'contains'=> array('File'=' > array('User'=> array('fields'=> array('username'))))'。 –