我有以下模型。
我需要为每个Industry找到6个最新的拖车。每部电影都不需要有预告片,也可以有多个0-n。
结果必须包含至少一个预告片的系列电影。
$this->Industry->find('all', array(
'contain' => array(
'Movie' => array(
'Trailer' => array(
'limit' => 1
),
'order' => 'Movie.release DESC',
'limit' => 6
)
),
'order' => 'Industry.name ASC'
));发布于 2013-01-02 14:19:51
备选方案1(最佳方案海事组织):
你走在正确的轨道上--你现在所需要的就是增加使用CakePHP的CouterCache。
基本上,您在您的'counterCache' => true关联中设置了$belongsTo,并添加了一个字段:singularModel_count (在您的示例中,它将是movies表中的trailer_count字段)。然后,您可以对该字段进行条件设置(请参阅下面更改的代码)。
CakePHP的CounterCache通过添加/减去任何通过CakePHP方法添加/删除的东西来自动跟踪它有多少项。
$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的缺点是,它将使它很难做的事情,如返回多个预告片,因为你会做一个内部连接(很可能)之间的电影和预告片。
https://stackoverflow.com/questions/14123018
复制相似问题