我有一个简单的Person
树parent_id
。
我不会构建一个( Yii2 )查询来查找给定Person
的所有子,即父别人(又名不是叶子)。
输出SQL应如下所示:
select * from person t
where exists (select 1 from person p2 where t.id = p2.parent_id);
但是找不到使用查询构建器构建它的正确方法,有一个方法->exists()
,但没有太多关于它的文档/示例。
答案 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);
生成如:
的sqlSELECT * 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