首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我希望在我的查询中包含Cakephp代码

我希望在我的查询中包含Cakephp代码
EN

Stack Overflow用户
提问于 2014-11-19 11:33:34
回答 1查看 30关注 0票数 0

我是Cakephp初学者。我想要这个带cakephp的查询。

原始查询..

代码语言:javascript
复制
SELECT `Advertisement`.*, `Gallery`.`image` FROM `moenatmi_moen`.`advertisements`
AS `Advertisement` LEFT JOIN `moenatmi_moen`.`galleries` AS `Gallery` ON 
(`Gallery`.`advertise_id` = `Advertisement`.`id` AND `Gallery`.`main_ad_image`
= 1) WHERE `Advertisement`.`status` = 1 AND `Advertisement`.`category_id` = 14 AND
((`Advertisement`.`expiry_date` >= '2014-11-18') OR (`Advertisement`.`expiry_date`
IS NULL)) GROUP BY `Advertisement`.`id` ORDER BY `Advertisement`.`id` desc
LIMIT 10

我想要这样的查询..

代码语言:javascript
复制
SELECT `Advertisement`.*, `Gallery`.`image` FROM `moenatmi_moen`.`advertisements`
AS `Advertisement` LEFT JOIN `moenatmi_moen`.`galleries` AS `Gallery` ON
(`Gallery`.`advertise_id` = `Advertisement`.`id` AND `Gallery`.`main_ad_image` = 1)
WHERE `Advertisement`.`status` = 1 AND `Advertisement`.`category_id` IN (select id from
categories where id=14 or parent_id=14) AND ((`Advertisement`.`expiry_date` >=
'2014-11-18') OR (`Advertisement`.`expiry_date` IS NULL)) GROUP BY
`Advertisement`.`id` ORDER BY `Advertisement`.`id` desc LIMIT 10

原始Cakephp代码..

代码语言:javascript
复制
$this->paginate['conditions'] = array(
        'Advertisement.status'=>1,
        'Advertisement.category_id'=>$cat_id,
        'OR'=>array(
               'Advertisement.expiry_date >='=>date('Y-m-d'),
               'Advertisement.expiry_date'=>null
                   )
       );

帮帮我..。谢谢你..

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 12:59:54

这应该是一个无痛切换。第一个查询在主查询中调用您想要的类别ids。

$cat_id与您在原始查询中使用的变量相同。

代码语言:javascript
复制
$ids = $this->Category->find('all', array(
    'conditions' => array(
        'id' => $cat_id, 
        'parent_id' => $cat_id
        )
    )
);

这里需要注意的重要一点是,此查询将输出典型的嵌套数组。

代码语言:javascript
复制
array(
    array(),
    array(),
    array()
);

classicExtract函数将为您筛选乱七八糟的东西,并为您提供一个包含'id‘列表的单个数组,这正是您的查询所需的。例如:

代码语言:javascript
复制
array(14, 15, 16, 18, 19);

最后,您的主要查询。

代码语言:javascript
复制
$this->paginate['conditions'] = array(
    'Advertisement.status'=>1, 
    'Advertisement.category_id'=> Set::classicExtract($ids, '{n}.Category.id'),
    'OR'=>array(
        'Advertisement.expiry_date >=' => date('Y-m-d'),
        'Advertisement.expiry_date'=>null
    )
);

结论你的新条件看起来就像这样:

代码语言:javascript
复制
$ids = $this->Category->find('all', array(
    'conditions' => array(
        'id' => $cat_id, 
        'parent_id' => $cat_id
        )
    )
);

$this->paginate['conditions'] = array(
    'Advertisement.status'=>1, 
    'Advertisement.category_id'=> Set::classicExtract($ids, '{n}.Category.id'),
    'OR'=>array(
        'Advertisement.expiry_date >=' => date('Y-m-d'),
        'Advertisement.expiry_date'=>null
    )
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27008500

复制
相关文章

相似问题

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