当然,我可以model.setRowCount(0)
,
但是,如果我想用Yii::$app->db->createCommand($sql)->query()
来完成这项工作呢?
答案 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 in
或like
之类的运算符,因此运算符,值和=
符号是混合在一起的。
官方文档:
更新:我问了 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();
答案 2 :(得分:4)
您可以使用ActiveQuery课程where(),$conditions
将('id % 2 = 1')
。