Yii2和过滤器有CASES。可能吗?

时间:2016-11-25 08:53:15

标签: sql activerecord yii filter yii2

我有一个带有if条件的ActiveRecord查询:

    $query = Contacts::find()
        ->select([
            'c.*',
            'cg.contact_group_name as groupName',
            'if(cg.contact_group_name = "advertiser", ad.fiscal_name, ap.fiscal_name) as relatedName'])
        ->from('adv_contacts c')
        ->joinWith('contactsGroup')
        ->joinWith('advertiser')
        ->joinWith('publisher');

这意味着如果用户contactGroup是广告客户,我从一个表中获取值,如果来自另一个表的发布者...这样可以正常工作..

但是现在我遇到了Filter的问题..如何告诉Filter:

IF cg.contact_group_name = "advertiser", filter from ad.fiscal_name, else ap.fiscal_name.

也许我需要使用案例?但你可以在andFilterWhere中使用案例吗?我找不到任何教程...或者可能还有另一种方法?

目前我有这个过滤器:

    $query->andFilterWhere([
        'or',
        ['like', 'ap.fiscal_name', $this->relatedName],
        ['like', 'ad.fiscal_name', $this->relatedName],
    ]);

但这当然很糟糕,因为它总会返回所有价值......

1 个答案:

答案 0 :(得分:2)

没有记录Yii2运算符格式的情况http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#operator-format 但如果你愿意,你可以使用$ query-> andWhere with string format .. http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#string-format

使用远见在调用andwhere函数之前显式检查值是否为null(...)

if ( $this->your_balue <> NULL) {
   $query->andWhere('CASE WHEN  .... THEN .. ELSE .. END');

}