Ik denk dat dit een betere oplossing is. In plaats van het gebruik van onbewerkte zoekopdrachten zoals leftJoin
je moet je joinWith
aanvullen relaties met andOnCondition
(wat de noodzakelijke voorwaarden toevoegt aan uw lidmaatschapsverklaring).
$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();
Bovendien ziet het er schoner uit als je where
. schrijft clausules binnen relaties. Het werkt hetzelfde als het buiten schrijven (als ik me niet vergis), maar wanneer je je zoekopdracht herstructureert, kun je eenvoudig de hele relatie verwijderen zonder de relatievoorwaarden daarbuiten te vergeten.