我有一个数据库:
Companies | Users | Files
- ID - ID - ID
- company_id - user_id
所以对于我的模型:
- 公司有很多用户
- 用户属于公司并且有很多文件
- 文件属于用户
如何列出属于一家公司的所有文件? 没有用户和公司数据?所以单个数组列出文件。
我可以获取所有用户 ID,然后使用这些 ID 在文件搜索中进行查询。但我想知道,是否有最佳实践 cakePHP 方式?
我对蛋糕还很陌生。
谢谢
最佳答案
据我所知,没有任何用户或公司数据是不可能获取公司文件的,但是您可以使用 Containable behaviour 来限制数据。 .例如,如果你想在公司 Controller 中获取属于公司的文件,你可以使用这个:
$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');
关于php - CakePHP (2.4) 深层关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20493234/