Yii2查询条件存在

时间:2014-12-15 12:40:46

标签: yii2 query-builder

我有一个简单的Personparent_id

我不会构建一个( Yii2 )查询来查找给定Person的所有,即别人(又名不是叶子)。

输出SQL应如下所示:

select * from person t 
where exists (select 1 from person p2 where t.id = p2.parent_id);

但是找不到使用查询构建器构建它的正确方法,有一个方法->exists(),但没有太多关于它的文档/示例。

3 个答案:

答案 0 :(得分:5)

不确定我是否理解正确,但你看起来像这样。

$subQuery = (new \yii\db\Query)
                ->select([new \yii\db\Expression('1')])
                ->from('person p2')
                ->where('t.id = p2.parent_id');
$query = (new \yii\db\Query())
                ->select('*')
                ->from('person t')
                ->where(['exists', $subQuery]);
$command = $query->createCommand();
print_r ($command->sql);

生成如:

的sql
SELECT * FROM `person` `t` WHERE EXISTS (SELECT 1 FROM `person` `p2` WHERE t.id = p2.parent_id)

答案 1 :(得分:2)

你应该尝试类似的东西:

$tableName = Person::tableName();
$subQuery = (new Query())->select('*')->from($tableName . ' t2')->where('t1.id=t2.parent_id');
$persons = Person::find()->from($tableName . ' t1')->where(['exists', $subQuery])->all();

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#where

答案 2 :(得分:0)

我不知道只有查询的正确方法,但如果您也使用PHP,那么我认为this会对您有帮助。

并尝试使用关键字在Google中进行搜索:hierarchical menu PHP