php - CakePHP (2.4) 深层关系

标签 php mysql cakephp associations relationship

我有一个数据库:

 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/

相关文章:

php - 如何获得共同好友并在 while 循环中显示结果

php - 如何为我的 Blade 提供一个变量并将它们保存到一个变量中?

mysql - 有关移动应用中的 Firebase 和 MySQL 的问题

php - Codeigniter 在日期格式的 SQL 查询中自动添加反引号 (`` )/波浪号

php - 如何从php将空值传递给具有日期类型的数据库mysql

php - Laravel 在 Laravel 包中合并配置

php - 将FFmpeg作为php中的进程运行时出现超时错误

cakephp - 需要在cakePHP中输入全名

authentication - Cakephp 3 身份验证插件,登录 URL 不匹配

php - cakephp 将数据库字段中的输入数据匹配到文本框