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及其查询生成器的。我将补充一条说明,使其更加清楚。