2016-04-15 7 views
-1

Ich habe 2 Tabellen
Subquery in yii2

  1. Projekte (id, name)

  2. Konten (id, project_id, account_name)

möchte ich finden Alle Projekte mit ihrem account_name wie dieser

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

Bitte lassen Sie mich wissen, wie dies in yii2 möglich ist.
Ich kann es einfach in CakePHP tun, wo wir virtualFields verwenden können. Gibt es irgendeine Funktionalität in yii2 wie CakePHP?

Antwort

1

Eigentlich sollten Sie in der Lage sein, nur das schreiben in den select() Ruf als eine zusätzliche Spalte (Spaltennamen mit Klammern werden als DB Ausdrücke automatisch behandelt)

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

Wenn Sie die Spalte vorhanden haben, wie in anstelle eines Arrays die Active Klasse deklarieren eine zusätzliche öffentliche Eigenschaft, die das Feld erhält:

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

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

+0

Hallo ich will nur einen einzigen Datensatz. was nützt statt -> all(); –

+0

Behoben mit einem() Verfahren –

0

Ich habe versucht, diese

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

Das ist für mich arbeitet.