sql >> Databáze >  >> RDS >> Mysql

Yii2 - levé spojení za vícenásobné podmínky

Věřím, že toto je lepší řešení. Místo použití nezpracovaných dotazů jako leftJoin měli byste doplnit svůj joinWith vztahy s andOnCondition (což přidá potřebné podmínky do vašeho příkazu spojení).

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

Navíc to vypadá čistěji, když napíšete where klauzule uvnitř vztahů. Funguje to stejně jako psaní venku (pokud se nepletu), ale při refaktorování vašeho dotazu můžete snadno smazat celý vztah, aniž byste zapomněli podmínky vztahu venku.



  1. Laravel LeftPřipoj se kam

  2. Nelze se připojit k instanci RDS z instance EC2

  3. Cloud Vendor Deep-Dive:PostgreSQL na Google Cloud Platform (GCP)

  4. Aktualizujte řádky v jedné tabulce daty z jiné tabulky na základě stejného sloupce v každém