如何使用Yii 2构建像`select ... where id%2 = 1`这样的查询?

hao*_*ang 6 activerecord yii2

当然,我可以Yii::$app->db->createCommand($sql)->query(),但如果我想用一个ActiveRecord::find()->where($conditions)来完成这项工作呢?

aro*_*hev 9

以下是使用选项之一yii\db\Expression:

use yii\db\Expression;

...

$models = Customer::find()
    ->select(['id', 'name', ...])
    ->where(new Expression('id % 2 = 1')])
    ->all();
Run Code Online (Sandbox Code Playgroud)

它比原始的sql和 ['%2=', 'id', 1]因为它遵循顺序,在我看来更具可读性.

['%2=', 'id', 1]也不适合在这里,因为%2=是不实际的操作者等not inlike例如,操作者所以,价值和=符号是种混合在一起.

官方文档:

更新:我问过samdark,官方Gitter聊天的主要框架贡献者之一,他说正确的方法是使用yii\db\Expression.


ank*_*itr 6

您也可以使用Active Query实现此目的.这可能有所帮助.

$customers = Customer::find()
    ->select(['id', 'name', ...])
    ->where('id % 2 = 1')
    ->all();
Run Code Online (Sandbox Code Playgroud)

要么

$customers = Customer::find()
    ->select(['id', 'name', ...])
    ->where(['% 2 =', 'id', 1])
    ->all();
Run Code Online (Sandbox Code Playgroud)

参考.