首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 2.1查找使用

CakePHP 2.1查找使用
EN

Stack Overflow用户
提问于 2013-01-02 13:31:23
回答 1查看 18.9K关注 0票数 4

我有以下模型。

  1. 工业(身份证,名称)
  2. 电影(id,name,industry_id)产业有很多电影
  3. 预告片(id,name,movie_id)有很多拖车

我需要为每个Industry找到6个最新的拖车。每部电影都不需要有预告片,也可以有多个0-n。

结果必须包含至少一个预告片的系列电影。

代码语言:javascript
复制
$this->Industry->find('all', array(
    'contain' => array(
        'Movie' => array(
            'Trailer' => array(
                'limit' => 1
            ),
            'order' => 'Movie.release DESC',
            'limit' => 6
        )
    ),
    'order' => 'Industry.name ASC'
));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-02 14:19:51

备选方案1(最佳方案海事组织):

你走在正确的轨道上--你现在所需要的就是增加使用CakePHP的CouterCache

基本上,您在您的'counterCache' => true关联中设置了$belongsTo,并添加了一个字段:singularModel_count (在您的示例中,它将是movies表中的trailer_count字段)。然后,您可以对该字段进行条件设置(请参阅下面更改的代码)。

CakePHP的CounterCache通过添加/减去任何通过CakePHP方法添加/删除的东西来自动跟踪它有多少项。

代码语言:javascript
复制
$this->Industry->find('all', array(
    'contain' => array(
        'Movie' => array(
            'conditions' => array(
                'Movie.trailer_count >' => 0  // <-- Notice this addition
            ),
            'order' => 'Movie.release DESC',
            'limit' => 6,
            'Trailer' => array(
                'limit' => 1
            ),
        )
    ),
    'order' => 'Industry.name ASC'
));

备选方案2:

另一个选项是使用联接(请参阅CakePHP连接)。当CakePHP查询每个由“it ()”调用的模型时,它实际上会执行单独的查询,然后在返回给您之前连接数据。因此,不能根据子模型的条件限制父模型,因为它们实际上是单独的查询,而且MySQL将不知道您在条件中试图引用哪个表。

选项2的缺点是,它将使它很难做的事情,如返回多个预告片,因为你会做一个内部连接(很可能)之间的电影和预告片。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14123018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档