Насколько я знаю, невозможно получить файлы компании без каких-либо данных пользователя или компании, но вы можете ограничить данные, используя 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
Да, Контейнер может быть рекурсивным. Просто измените '' contains '=> array (' File ') 'to'' содержать '=> array (' File '=> array (' User ')) 'или'' содержать '=> array (' File '= > array ('User' => array ('fields' => array ('username')))) '. –