yii2。查询条件相似

时间:2017-06-06 12:45:21

标签: yii

在我的yii2应用程序中,我需要这样的东西:

SELECT * FROM customers WHERE first_name||' '||last_name ILIKE '%Nick%' ORDER BY "id";

此查询为客户提供了concatinated first_name和last_name,例如' Nick'。

在我的yii1应用程序中,我可以使用CDBCriteria下一步:

$criteria = new CDbCriteria;
        $criteria->addSearchCondition(
            "first_name||' '||last_name",
            'Nick',
            true,
            'and',
            'ILIKE'
        );

$criteria->order = 't.id asc';

这很好用。

在yii2中我尝试过:

$a = \common\models\Customer::find()
        ->filterWhere(['ILIKE', "first_name||' '||last_name", 'Nick'])
        ->orderBy(['id' => SORT_ASC])
        ->all();

并且异常列不存在,而sql是:

SELECT * FROM "customers" WHERE "first_name||' '||last_name" ILIKE '%Nick%' ORDER BY "id"

使用\ yii \ db \ Expression不会改变情况。

2 个答案:

答案 0 :(得分:0)

这是实现这一目标的众多方法之一:

$customers = \common\models\Customer::find()
        ->select('*')
        ->where(['like','concat(first_name,\' \', last_name)','Nick N'])
        ->orderBy(['id' => SORT_ASC])
        ->all();

答案 1 :(得分:0)

让它持续一段时间:

\common\models\Customer::find()
                ->where("first_name||' '||last_name ilike '%'||:query||'%'", [':query' => $name])
                ->orderBy(['id' => SORT_ASC])
                ->all()