我有一个带有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],
]);
但这当然很糟糕,因为它总会返回所有价值......
答案 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');
}