【问题标题】:Accessing 3rd association访问第三个关联
【发布时间】:2010-01-07 11:37:47
【问题描述】:

我有以下型号: - 议程(id、user_id、event_id)-> 属于事件、用户 - 事件(id 等)-> hasmany Agenda - 用户(id、city_id 等)-> hasmany Agenda,属于 City - 城市 (id, name) -> hasmany User

在议程控制器中,我想显示在其议程中具有特定 event_id 的用户的 City.name。如何将 City 数据添加到 Agendas 数组的 User 数组中?

注意我不想使用递归 2,因为这会将大量数据加载到数组中。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    您最好的选择看起来是 CakePHP 可包含行为 http://book.cakephp.org/view/474/Containable

    它允许您限制返回的关联模型数据 - 它基本上具有递归 2 的能力,能够找到深度关联数据,但性能要好得多,而且更干净,因为它只为您提供所需的数据.

    类似下面的代码应该返回用户数据中的城市数据,包括 event_id 的条件。

    $this->Agenda->find('all', array(
        'contain' => array(
            'User' => array(
                'City'
            ),
        ),
        'conditions' => array(
            'Agenda.event_id' => $event_id
        )
    ));
    

    只需完成该代码 sn-p,确保 var $actsAs = array('Containable'); 位于模型顶部(如果您希望所有模型都可以访问可包含行为,则在 app_model.php 中)

    【讨论】:

    • 很好的答案,非常完整!当我第一次发现 Containable 时,我欣喜若狂。它是如此普遍,以至于我认为在许多 Cake 教程中都需要强调它,而通常不是这样。
    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多