Yii 是的。具有相似条件的查询

Yii 是的。具有相似条件的查询,yii,Yii,在我的yii2应用程序中,我需要如下内容: SELECT * FROM customers WHERE first_name||' '||last_name ILIKE '%Nick%' ORDER BY "id"; 此查询获取名和姓(如“Nick”)相关的客户 在我的yii1应用程序中,我可以下一步使用CDBCriteria: $criteria = new CDbCriteria; $criteria->addSearchCondition(

在我的yii2应用程序中,我需要如下内容:

SELECT * FROM customers WHERE first_name||' '||last_name ILIKE '%Nick%' ORDER BY "id";
此查询获取名和姓(如“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();
和Get exception列不存在,sql为:

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

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

这是许多方法之一:

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

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

您使用的是哪个数据库?如果客户的名字是“Nick”,姓氏是“Nick”,而查询行是“Nick N”,则为PostgreSql。它不起作用。我不明白您之前的问题。该示例根据您的案例工作。现在,我已编辑了该示例。