yii2 各种查询

简单的用法中,where()方法是设置查询条件的,也就是sql语句中的where部分,例如:

$query = Article::find()->where(['status'=>10]);
//sql: SELECT * FROM `article` WHERE `status`=10
$query = Article::find()->where(['status'=>10, 'type'=>1]);
//sql: SELECT * FROM `article` WHERE (`status`=10) AND (`type`=1)
$query = Article::find()->where(['status'=>10, 'id'=>[1,2,3]]);
//sql: SELECT * FROM `article` WHERE (`status`=10) AND (`id` IN (1, 2, 3))

where()还可以指定运输符,例如:

$query = Article::find()->where(['>=', 'id', 10]);
//sql: SELECT * FROM `article` WHERE `id` >= 10

当然,where()还有更复杂的用法,例如:

$query = Article::find()->where(['and', 'type=1', 'status=10']);
//sql: SELECT * FROM `article` WHERE (type=1) AND (status=10)
$query = Article::find()->where(['and', 'type=1', ['or', 'cid=1', 'status=10']]);
//sql: SELECT * FROM `article` WHERE (type=1) AND ((cid=1) OR (status=10))

除了and,当然还有如or、not、between、not between、in、not in、like、or like、not like、or not like、exists、not exists,用法示例如下:

//or
$query = Article::find()->where(['or', ['type'=>[7,8,9]], ['status'=>[1,2,3]]]);
//sql: SELECT * FROM `article` WHERE (`type` IN (7, 8, 9)) OR (`status` IN (1, 2, 3))

//not
$query = Article::find()->where(['not', ['type'=>[7,8,9]]]);
//sql: SELECT * FROM `article` WHERE NOT (`type` IN (7, 8, 9))

//between
$query = Article::find()->where(['between', 'id', 1, 10]);
//sql: SELECT * FROM `article` WHERE `id` BETWEEN 1 AND 10

//not between
$query = Article::find()->where(['not between', 'id', 1, 10]);
//sql: SELECT * FROM `article` WHERE `id` NOT BETWEEN 1 AND 10

//in
$query = Article::find()->where(['in', 'id', [1,2,3]]);
//sql: SELECT * FROM `article` WHERE `id` IN (1, 2, 3)
$query = Article::find()->where(['in', ['id', 'type'], [['id'=>1, 'type'=>10], ['id'=>2, 'type'=>8]]]);
//sql: SELECT * FROM `article` WHERE (`id`, `type`) IN ((1, 10), (2, 8))

//not in
$query = Article::find()->where(['not in', 'id', [1,2,3]]);
//sql: SELECT * FROM `article` WHERE `id` NOT IN (1, 2, 3)

//like
$query = Article::find()->where(['like', 'name', 'tester']);
//sql: SELECT * FROM `article` WHERE `name` LIKE '%tester%'
$query = Article::find()->where(['like', 'name', ['test', 'sample']]);
//sql: SELECT * FROM `article` WHERE `name` LIKE '%test%' AND `name` LIKE '%sample%'
$query = Article::find()->where(['like', 'name', '%tester', false]);
//sql: SELECT * FROM `article` WHERE `name` LIKE '%tester'

//or like
$query = Article::find()->where(['or like', 'name', ['test', 'sample']]);
//sql: SELECT * FROM `article` WHERE `name` LIKE '%test%' OR `name` LIKE '%sample%'

//not like
$query = Article::find()->where(['not like', 'name', 'tester']);
//sql: SELECT * FROM `article` WHERE `name` NOT LIKE '%tester%'

//or not like
$query = Article::find()->where(['or not like', 'name', ['test', 'sample']]);
//sql: SELECT * FROM `article` WHERE `name` NOT LIKE '%test%' OR `name` NOT LIKE '%sample%'

//exists
$query = Article::find()->where(['exists', Article::find()->select('id')->from('users')->where(['active'=>1])]);
//sql: SELECT * FROM `article` WHERE EXISTS (SELECT `id` FROM `users` WHERE `active`=1)

//not exists
$query = Article::find()->where(['not exists', Article::find()->select('id')->from('users')->where(['active'=>1])]);
//sql: SELECT * FROM `article` WHERE NOT EXISTS (SELECT `id` FROM `users` WHERE `active`=1)

另外,andWhere()和orWhere()的用法,与where()基本相同。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值