通过相关表的计数进行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 )
    );