如何解决Yii2:如何在ActiveRecord中使用子查询?
我想创建一个查找功能,然后在GridView小部件中使用。我不知道如何使用子查询。
这是我拥有的PostgreSQL查询的简单版本:
SELECT color
FROM cars
LEFT JOIN (
SELECT name
FROM companies
)
这是我尝试的方法,不起作用:
$query = Cars::find()
->select([
'color' => '
SELECT name // Problem here.
FROM companies // Problem here.
',]);
解决方法
您期望的查询不是您要尝试的。您可以将自定义子查询添加为
$query = Cars::find()
->select([
'(SELECT name FROM companies) AS xxx'
]);
但是,如果要将联接表中的字段添加到网格中,则应该定义一个关系,然后可以轻松地将这样的列添加到网格中。参见https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#relational-data
,您可以在Rate
方法中使用ActiveQuery
的实例,如下所示:
leftJoin()
有关$subQuery = Companies::find()
->select('name','id'); //I've added ID to show how to write on condition
$query = Cars::find()
->select('color')
->leftJoin(
['alias' => $subQuery],'alias.id = cars.company_id'
);
和leftJoin()
方法的更多详细信息,请参见documentation。
$query = Cars::find()
->select(['cars.color','companies.name'])
->leftJoin('companies','cars.company_id = companies.id');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。