yii2 中的子查询

Subquery in yii2

我有2张桌子

  1. 项目(id,名称)

  2. 账户(id,project_id,account_name)

我想找到所有 account_name 这样的项目

SELECT Project.*,(SELECT account_name FROM accounts WHERE projectid = Project.id) FROM projects as Project

请告诉我这在 yii2 中如何实现。
我可以在 cakephp 中轻松完成,我们可以在其中使用 virtualFields.is yii2 中有任何功能,如 cakephp ?

我试过了

$rows = (new \yii\db\Query())
                    ->select(['*','(SELECT account_name FROM accounts WHERE id = projects.account_id) as account_name'])
                    ->from('projects')
                    ->where(['id' => $id])
                    ->all();

这对我有用。

实际上,您应该能够将其作为附加列写入 select() 调用(带括号的列名被自动视为数据库表达式)

Project::find()
    ->select([
        'Project.*', 
        '(SELECT account_name FROM accounts WHERE projectid = Project.id) AS account_name'
    ])
    ->asArray()->all();

如果您希望在 ActiveRecord class 中显示列而不是数组,请声明一个额外的 public 属性 来接收字段:

class Project extends ActiveRecord {
    // ...
    public $account_name;
    // ...
}

http://www.yiiframework.com/doc-2.0/yii-db-query.html#select()-detail

我认为这更具可读性。 也没有原始查询。

$rows = (new \yii\db\Query())
    ->select([
        'p.*',
        'a.account_name'
    ])
    ->from('projects p')
    ->innerJoin('accounts a', 'a.id = p.account_id')
    ->all();