当然,我可以Yii::$app->db->createCommand($sql)->query()
, 但是如果我想用ActiveRecord::find()->where($conditions)
来完成这项工作?如何使用Yii 2构建类似`select ... where id%2 = 1`的查询?
6
A
回答
8
下面是使用yii\db\Expression
选项之一:
use yii\db\Expression;
...
$models = Customer::find()
->select(['id', 'name', ...])
->where(new Expression('id % 2 = 1')])
->all();
它比原始的SQL ['%2=', 'id', 1]
definetely更好,因为它遵循的顺序,在我看来更具有可读性。
['%2=', 'id', 1]
也不适合在这里,因为%2=
实际上不是像not in
或like
例如操作员,操作员这样,价值和=
符号被种混合在一起。
官方文档:
更新:我问samdark,在官方的Gitter主体框架贡献者之一聊天,他说,正确的方式它是否使用yii\db\Expression
。
4
您可以使用ActiveQuery类where(),您的$conditions
将是('id % 2 = 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();
相关问题
- 1. 在yii中构建'AND'查询2
- 2. 使用同一表中的select查询-2更新select select-1
- 3. 2查询1使用2个不同的WHERE
- 4. 如何在Yii中使用union 2创建查询?
- 5. mysql select datetime查询找到1岁,2岁等的ID
- 6. 是否有任何替代此SELECT * FROM类型WHERE tid ='1'或tid ='2';查询?
- 7. Yii 1和Yii 2
- 8. 如何使2 SQL查询1
- 9. SELECT WHERE列1 = 1 AND列2 = MAX(列2)
- 10. 使用不同的WHERE子句重构类似的子查询
- 11. SELECT * FROM表WHERE领域IN(SELECT ID FROM表ORDER BY域2)
- 12. 的PhoneGap sqlitePlugin查询“SELECT * FROM sms_list WHERE ID = 1”返回错误
- 13. mysql 2查询为1
- 14. Cypher - WHERE和AND与2 ID
- 15. 如何查询表,但忽略某些列,如ID =“1”和“2”
- 16. TSQL 2中的查询1
- 17. 使用count()构建sql查询where count()is> 1
- 18. 如何使用QueryBuilder在Doctrine 2中使用SELECT子查询创建LEFT JOIN?
- 19. 如何使用linq-to-entities构建类似selectbyexample的查询?
- 20. 如何在Yii中查询构建器使用LIKE
- 21. 如何使2 SELECT语句
- 22. MYSQL/SQL:我如何做2查询1
- 23. 创建表3 AS SELECT WHERE从表1从表2
- 24. 组合2个SELECT查询
- 25. 查询1场使用where子句
- 26. 如何将SELECT + WHERE查询与INSERT查询结合使用?
- 27. MySQL 2查询合并为1查询
- 28. SQL SELECT查询逻辑,用2份
- 29. 如何将用户的密码从yii 1迁移到yii 2
- 30. 2 mysql select查询不起作用
当Expression对象嵌入到SQL语句或片段中时,它将被替换为$ expression属性值'不带任何数据库转义或引用'。现在,我明白这是意思。 – haoliang
但对象(新表达式)不能是数组中的键。它的工作原理如下:' - > where(new Expression('id%2 = 1'))' – haoliang
这样,where(new Expression('id%2 = 1')' 'id%2 = 1')'.lol。 – haoliang