Mysql
 sql >> Database >  >> RDS >> Mysql

Yii2 - join sinistro in condizioni multiple

Credo che questa sia una soluzione migliore. Invece di usare query Raw come leftJoin dovresti completare il tuo joinWith relazioni con andOnCondition (che aggiunge le condizioni necessarie nella tua dichiarazione di adesione).

$products = Product::find()
    ->joinWith(['metaData' => function (ActiveQuery $query) {
        return $query
            ->andWhere(['=', 'meta_data.published_state', 1]);
    }])
    ->joinWith(['availability' => function (ActiveQuery $query) {
        return $query
            ->andOnCondition(['>=', 'availability.start', strtotime('+7 days')])
            ->andWhere(['IS', 'availability.ID', NULL]);
    }])
    ->all();

Inoltre sembra più pulito quando scrivi where clausole all'interno delle relazioni. Funziona come scriverlo all'esterno (se non sbaglio), ma durante il refactoring della query, puoi facilmente eliminare l'intera relazione senza dimenticare le condizioni della relazione all'esterno.