Jeg tror, at denne er en bedre løsning. I stedet for at bruge Raw-forespørgsler som leftJoin
du bør supplere din joinWith
relationer med andOnCondition
(hvilket tilføjer nødvendige, hvor betingelser i din sammenslutningserklæring).
$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();
Derudover ser det renere ud, når du skriver where
klausuler i relationer. Det fungerer på samme måde som at skrive det udenfor (hvis jeg ikke tager fejl), men når du omfaktorerer din forespørgsel, kan du nemt slette hele relationen uden at glemme relationsbetingelser udenfor.