web-dev-qa-db-ja.com

Yii2:ActiveQueryの例とGiiでActiveQueryクラスを個別に生成する理由は何ですか?

使用例を教えてください。説明をいただければ幸いです。良い例が見つかりません。

ActiveQuery in Gii

33
akmnahid

Active Query は、 Active Record クラスに関連付けられたDBクエリを表します。通常、特定のモデルのデフォルトのfind()メソッドをオーバーライドするために使用され、DBに送信する前にクエリを生成するために使用されます。

class OrderQuery extends ActiveQuery
{
     public function payed()
     {
        return $this->andWhere(['status' => 1]);
     }

     public function big($threshold = 100)
     {
        return $this->andWhere(['>', 'subtotal', $threshold]);
     }

}

以前にYii 1で作業した場合、これがYii2の Yii 1.x名前付きスコープ を置き換えるものです。あなたがしなければならないことは、find()メソッド:

// This will be auto generated by gii if 'Generate ActiveQuery' is selected
public static function find()
{
    return new \app\models\OrderQuery(get_called_class());
}

次に、この方法で使用できます。

$payed_orders      =   Order::find()->payed()->all();

$very_big_orders   =   Order::find()->big(999)->all();

$big_payed_orders  =   Order::find()->big()->payed()->all();

上で定義した同じActiveQueryクラスの別の使用例は、リレーショナルデータを定義するときに使用することです関連するmodelクラスの場合:

class Customer extends \yii\db\ActiveRecord
{
    ...

    public function getPayedOrders()
    {
        return $this->hasMany(Order::className(),['customer_id' => 'id'])->payed();
    }
}

次に、顧客とそれぞれの支払われた注文を熱心にロードできます:

$customers = Customer::find()->with('payedOrders')->all(); 
81
Salem Ouerdani