Yii2使用关系删除查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2使用关系删除查询相关的知识,希望对你有一定的参考价值。
我在Yii2中定义了一个关系,其中每个网站都可以有多个提要:
public function getFeeds() {
return $this->hasMany(Feed::className(), ['website_id' => 'id']);
}
现在考虑以下查询:
$ids = [2, 3];
$feeds = Website::find()->where(['user_id' => 1])->with(['feeds' => function($query) use ($ids) {
$query->where(['id' => $ids);
}])->all();
相应的原始SQL查询是:
SELECT * FROM `website` WHERE `user_id`= 1 // returns 4, 5, 6
SELECT * FROM `feed` WHERE (`id` IN (2, 3)) AND (`website_id` IN (4, 5, 6))
我的问题是,我可以使用Active Record删除此查询的版本吗?像这样的东西:
SELECT * FROM `website` WHERE `user_id`= 1
DELETE FROM `feed` WHERE (`id` IN (2, 3)) AND (`website_id` IN (4, 5, 6))
任何帮助,将不胜感激。
答案
你可以这样做:
$query = Website::find()
->select('id')
->where(['user_id' => 1]);
Feed::deleteAll([
'id' => [2, 3],
'website_id' => $query
]);
另一答案
在这种情况下,CreateCommand可能更好
要做到这一点,你应该使用连接bild原始查询,例如:
select *
from `feed`
join `website` on `website`.id = `feed`.`website_id`
WHERE website`.`user_id`= 1
AND `feed`.id IN (2, 3)
或删除
delete
from `feed`
join `website` on `website`.id = `feed`.`website_id`
WHERE website`.`user_id`= 1
AND `feed`.id IN (2, 3)
然后为Yii2
$sql = "delete
from `feed`
join `website` on `website`.id = `feed`.`website_id`
WHERE website`.`user_id`= 1
AND `feed`.id IN (2, 3);"
Yii::$app->db->createCommand($sql)->execute();
以上是关于Yii2使用关系删除查询的主要内容,如果未能解决你的问题,请参考以下文章