Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2查询条件已存在_Yii2_Query Builder - Fatal编程技术网

Yii2查询条件已存在

Yii2查询条件已存在,yii2,query-builder,Yii2,Query Builder,我有一个简单的Person树,带有parent\u id 我习惯于构建一个(Yii2)查询,以查找给定的人的所有子女,这些子女是其他人的父母(也就是说,不是离开) 输出SQL应如下所示: select * from person t where exists (select 1 from person p2 where t.id = p2.parent_id); 但是找不到使用查询生成器构建的正确方法,有一个方法->exists(),但是没有太多关于它的文档/示例。我不知道只使用查询的正确方

我有一个简单的
Person
树,带有
parent\u id

我习惯于构建一个(Yii2)查询,以查找给定的
人的所有子女,这些子女是其他人的父母(也就是说,不是离开)

输出SQL应如下所示:

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

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

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


还可以尝试在谷歌搜索关键词:
层次菜单PHP

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

$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)

您应该尝试以下方法:

$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();

谢谢,但问题是针对Yi2及其查询生成器的。我将补充一条说明,使其更加清楚。