我想知道如何缩小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()进行第一次关系并对它进行排序以得到第二关系的结果,但这似乎并不是很明智。
答案 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”;
}