2016-07-19 5 views
0

Ich habe 3 TabellenYii2: ActiveQuery Nutzungsbeziehungen

Zertifikate, Benutzer, Status

sie haben diese Beziehungen:

certificates - user, one -- many 
user-status, one -- one 

Ich habe activeQuery zu:

$this->andWhere(['<', 'created', new Expression("DATE_SUB(NOW(), INTERVAL " . $days . " DAY)")]) 
      ->andWhere(['is_active' => 1]) 
      ->andWhere(['<', 'delayed_until', new Expression("NOW()")]) 
      ->andWhere(['<', 'resend_count', LeCertificate::RESEND_COUNT]) 

ist Es ist möglich, hinzufügen Bereich ->andWhere, wo ich status.not_deleted = 0 für das aktuelle Zertifikat bekommen kann?

Antwort

1

Unter der Annahme, dass Sie die richtigen Beziehungen in LeCerificate und User Klassen definiert haben:

LeCertificate::find()->alias('C') 
    ->joinWith(['users', 'users.status S'], false, 'INNER JOIN') 
    ->andWhere(['<', 'C.created', new Expression("DATE_SUB(NOW(), INTERVAL " . $days . " DAY)")]) 
    ->andWhere(['C.is_active' => 1]) 
    ->andWhere(['<', 'C.delayed_until', new Expression("NOW()")]) 
    ->andWhere(['<', 'C.resend_count', LeCertificate::RESEND_COUNT]) 
    ->andWhere(['S.not_deleted' => 0]); 

Beziehungen sollten sieht aus wie folgt:

class LeCertificate extends ActiveRecord 
{ 
    ... 

    public function getUsers() 
    { 
     return $this->hasMany(User::className(), ['certificate_id' => 'id']); 
    } 

    ... 
} 

und

class User extends ActiveRecord 
{ 
    ... 

    public function getStatus() 
    { 
     return $this->hasOne(Status::className(), ['id' => 'status_id']); 
    } 

    ... 
}