sql >> データベース >  >> RDS >> Mysql

Yii2-複数の条件で左結合

    これがより良い解決策だと思います。 leftJoinのようなRawクエリを使用する代わりに joinWithを補完する必要があります andOnConditionとの関係 (これにより、必要なwhere条件がjoinステートメントに追加されます)。

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

    さらに、whereと書くと、見た目がすっきりします。 リレーション内の句。外部に書き込むのと同じように機能しますが(私が間違っていない場合)、クエリをリファクタリングするときに、外部の関係条件を忘れることなく、関係全体を簡単に削除できます。



    1. マージ更新オラクルは、安定した行のセットを取得できません

    2. 再帰機能を備えたエコーメニューツリー

    3. 英数字と空白を含むレコードを取得する方法

    4. 並列プロセスを作成するためのRubyonRailsでのフォークの使用