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