如何扩展/指定Yii2的关系?

时间:2016-02-11 13:08:59

标签: yii2 relation

我想知道如何缩小SQL查询的性能和思考。因此,我有以下问题:

假设我们有以下关系:

public function getOrders() {
    return $this->hasMany(Orders::className(), ['fk_product_id' => 'id']);
}

public function getOrdersByDate() {
    return $this->hasMany(Orders::className(), ['fk_product_id' => 'id'])->orderBy('date');
}

所以问题是,当我呼叫$model->ordersByDate时,有没有办法连接这两个关系,而不必进行额外的SQL查询?我知道我可以通过foreach()进行第一次关系并对它进行排序以得到第二关系的结果,但这似乎并不是很明智。

1 个答案:

答案 0 :(得分:1)

您可以使用->with()一次获取所有信息

Model::find()->with('orders')->with('ordersByDate')->all()

然后使用$model->orders

引用它们

或者您可以使用getOrders获取订单一次,然后在数组中进行排序/查找。

除非你可以更具体地了解你正在运行什么样的查询,并且你想要一个解决方案,你可以适应几个不同的问题,你只需要阅读:)

http://www.yiiframework.com/doc-2.0/yii-helpers-basearrayhelper.html

检查BaseArrayHelper :: index()

http://www.w3schools.com/php/php_arrays_sort.asp

http://php.net/manual/en/function.array-search.php

http://php.net/manual/en/function.ksort.php

  

$ fruits = array(“d”=&gt;“lemon”,“a”=&gt;“orange”,“b”=&gt;“banana”,“c”=&gt;“apple”); < / p>      

ksort($水果);

     

foreach($ fruits as $ key =&gt; $ val){

     

echo“$ key = $ val \ n”;

     

}