sql >> Databasteknik >  >> RDS >> Mysql

Yii2 - vänster koppling på flera villkor

Jag tror att den här är en bättre lösning. Istället för att använda Raw-frågor som leftJoin du bör komplettera din joinWith relationer med andOnCondition (vilket lägger till nödvändiga villkor i ditt sammanfogningsförklaring).

$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();

Dessutom ser det renare ut när du skriver where klausuler i relationer. Det fungerar på samma sätt som att skriva det utanför (om jag inte har fel), men när du refaktorerar din fråga kan du enkelt ta bort hela relationen utan att glömma relationsvillkor utanför.



  1. Returnera en lista med tabeller från en länkad server i SQL Server (T-SQL-exempel)

  2. Hur LOG() fungerar i MariaDB

  3. Behöver endast välja data som innehåller snedstreck i MySQL

  4. Infoga SQL Server-data i Salesforce.com