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

时间:2015-08-19 06:06:28

标签: activerecord yii2

当然,我可以model.setRowCount(0), 但是,如果我想用Yii::$app->db->createCommand($sql)->query()来完成这项工作呢?

3 个答案:

答案 0 :(得分:9)

以下是使用yii\db\Expression的其中一个选项:

use yii\db\Expression;

...

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

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

['%2=', 'id', 1]也不适合此处,因为%2=实际上并不是not inlike之类的运算符,因此运算符,值和=符号是混合在一起的。

官方文档:

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

答案 1 :(得分:6)

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

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

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

Reference

答案 2 :(得分:4)

您可以使用ActiveQuery课程where()$conditions('id % 2 = 1')