通过相关表的计数进行CakePHP搜索
我需要进行搜索,根据相关表的“计数”进行过滤,但我不能这样做 以下是查询:通过相关表的计数进行CakePHP搜索,cakephp,relationship,Cakephp,Relationship,我需要进行搜索,根据相关表的“计数”进行过滤,但我不能这样做 以下是查询: $this->paginate = array ( 'Establishment' => array ( 'conditions' => array ( 'EstablishmentsCategory.slug' =&g
$this->paginate = array
(
'Establishment' => array
(
'conditions' => array
(
'EstablishmentsCategory.slug' => $category,
),
'limit' => 10,
'order' => $order,
'fields' => array('Establishment.*'),
'contain' => array
(
'EstablishmentsCategory',
'EstablishmentsImage',
'EstablishmentsCoupon' => array('fields' => array('id'))
)
)
);
$data = $this->paginate('Establishment');
现在这个返回数组如下所示:
[0] => Array
(
[Establishment] => Array
(
[id] => 2
[establishments_category_id] => 1
[slug] => xxxxxx
[name] => xxxxxx
[description] => xxxxxx
[active] => 0
[modified] => 2012-01-25 15:31:23
[created] => 2011-07-29 10:03:51
)
[EstablishmentsCategory] => Array
(
[id] => 1
)
[EstablishmentsCoupon] => Array
(
[0] => Array
(
[id] => 2
[establishment_id] => 2
)
)
[EstablishmentsImage] => Array
(
[0] => Array
(
[id] => 2
[establishment_id] => 2
[image] => fsdfsdf.jpg
[created] => 2012-01-10 11:34:06
)
[1] => Array
(
[id] => 3
[establishment_id] => 2
[image] => werwerwer.jpg
[created] => 2012-01-10 11:34:06
)
[2] => Array
(
[id] => 4
[establishment_id] => 2
[image] => werwerwer.jpg
[created] => 2012-01-10 11:34:06
)
[3] => Array
(
[id] => 7
[establishment_id] => 2
[image] => werwerer2.jpg
[created] => 2012-01-10 13:31:01
)
)
)
问题是:我需要找到,所有的“机构”,都有一个或多个“机构”。我找不到这个问题的解决办法:你应该可以通过使用
group
子句和having
语句来解决这个问题
但是,请注意,如果您的查询需要递归设置,将查询拆分为多个查询以获取企业优惠券等,则这可能不起作用。
在上面的代码中,我在字段
参数中添加了一个ec\u计数
,然后添加了一个组
参数,该参数使用基于该ec\u计数的having
子句
如果您遇到有关组的查询语法问题,请尝试使用建制中的显式字段,而不是使用建制。*(这是一种不好的做法,因为您可能没有使用所有字段,也不知道您将得到什么)
同样,根据您的查询路径,这可能不起作用,但此模式已在我所使用的一个系统中起作用。如果您使用的是belongsTo关联(优惠券属于机构),则可以在优惠券模型上启用。当counterCache启用时,Cake将跟踪每个机构有多少优惠券
然后,您可以搜索具有简单查找条件的机构:
$this->Establishment->find( 'all',
conditions => array('Establishment.coupon_count >' => 0 )
);
你的报税表怎么了?当您使用'contain'语句时,您正在使用内部联接进行查询,因此,只返回具有ESTANCENTSCHOPON的机构。实际上,数组返回具有ESTANCENTSCHOPON和不具有ESTANCENTSCHOPON的机构,我只需要该机构具有一个或多个ESTANCENTSCHOPON。在本例中,我有一个EstablishmentsCoupon,但如果该机构没有任何EstablishmentsCoupon(空数组),我需要将其删除。
$this->Establishment->find( 'all',
conditions => array('Establishment.coupon_count >' => 0 )
);