2017-09-20 2 views
0

ich habe folgende Modelle in yii2:SubQuery in Active

use frontend\modules\bewerber\models\Bewerber; 
use common\modules\basis\models\base\Person; 
use common\modules\lookup\models\LAnrede; 

Wie folgende Abfrage mit Methoden der Active zu schaffen?

SELECT anrede FROM L_anrede JOIN Person ON L_anrede.id=Person.id_anrede WHERE Person.id IN 
(SELECT id_person FROM Bewerber WHERE Bewerber.id_person=1); 

PS: Die letzte WHERE-Klausel sollte nicht beheben, sondern variabel wie folgt aus:

var_dump(LAnrede::findOne([$model->id_person])->anrede) 

, die folgendes Ergebnis löschte wird: Herr oder Fräulein

... .................................................. ...........

Hinweis für Fabrizio Caldarelli

............................................ ....................

Ur-Lösung wird mir nicht helfen: = (

Dies ist ur-Code:

$idPerson = 1; 
 

 
$show=LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) { 
 
     $q->andWhere([ 
 
      'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson]) 
 
     ])->anrede; 
 
}]);

und das ist var_dump($show);

E:\xampp\htdocs\yii2_perswitch\frontend\modules\bewerber\views\bewerber\index.php:48: 
 
object(common\modules\lookup\models\LAnredeQuery)[207] 
 
    public 'sql' => null 
 
    public 'on' => null 
 
    public 'joinWith' => 
 
    array (size=1) 
 
     0 => 
 
     array (size=3) 
 
      0 => 
 
      array (size=1) 
 
       ... 
 
      1 => boolean true 
 
      2 => string 'LEFT JOIN' (length=9) 
 
    public 'select' => null 
 
    public 'selectOption' => null 
 
    public 'distinct' => null 
 
    public 'from' => null 
 
    public 'groupBy' => null 
 
    public 'join' => null 
 
    public 'having' => null 
 
    public 'union' => null 
 
    public 'params' => 
 
    array (size=0) 
 
     empty 
 
    private '_events' (yii\base\Component) => 
 
    array (size=0) 
 
     empty 
 
    private '_behaviors' (yii\base\Component) => 
 
    array (size=0) 
 
     empty 
 
    public 'where' => null 
 
    public 'limit' => null 
 
    public 'offset' => null 
 
    public 'orderBy' => null 
 
    public 'indexBy' => null 
 
    public 'emulateExecution' => boolean false 
 
    public 'modelClass' => string 'common\modules\lookup\models\LAnrede' (length=36) 
 
    public 'with' => null 
 
    public 'asArray' => null 
 
    public 'multiple' => null 
 
    public 'primaryModel' => null 
 
    public 'link' => null 
 
    public 'via' => null 
 
    public 'inverseOf' => null

Ich benutze Gridview wie diese

$gridColumn = [ 
 
    [ 
 
     'attribute' => '', 
 
     'label' => Yii::t('app', 'Anrede'), 
 
     'format' => 'html', 
 
     'value' => function($model) { 
 
      return "<p><font color='green'>" . LAnrede::findOne([$model->id_person])->anrede . "</p>"; 
 
     } 
 
    ], 
 
    ];

Colud u zeigen mir auf, wie ur-Lösung in diesem Zusammenhang zu benutzen?

Antwort

1

Dies sollte funktionieren:

$idPerson = 1; 

LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) { 
     $q->andWhere([ 
      'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson]) 
     ]); 
}]) 
->all(); 

'Person' eine Beziehung in LAnrede Modell ist

public function getPerson() 
{ 
    return $this->hasMany(Person::className(), ['id_anrede' => 'id']); 
} 
+0

die Beziehungen bereits durch Gii – tklustig

+0

ok eingestellt wurden, so nehmen (eine oder mehrere Beziehung?) nur erster Ausschnitt. –

+0

Bitte lesen Sie meinen Beitrag erneut. Ich habe ihn geändert! – tklustig