extend/specify Yii2的关系如何?
how to extend/specify Yii2's relations?
我想知道性能并考虑如何缩小我的 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() 处理第一个关系并对它进行排序以获得第二个关系的结果,但这似乎不太明智。
您可以使用->with()
一次获取所有信息
Model::find()->with('orders')->with('ordersByDate')->all()
然后用$model->orders
引用它们
或者稍后在数组中使用 getOrders
和 sort/find 获取一次订单。
除非您可以更具体地说明您的查询类型 运行,并且您想要一个可以适应多个不同问题的解决方案,否则您只需要阅读 :)
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"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
我想知道性能并考虑如何缩小我的 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() 处理第一个关系并对它进行排序以获得第二个关系的结果,但这似乎不太明智。
您可以使用->with()
一次获取所有信息
Model::find()->with('orders')->with('ordersByDate')->all()
然后用$model->orders
或者稍后在数组中使用 getOrders
和 sort/find 获取一次订单。
除非您可以更具体地说明您的查询类型 运行,并且您想要一个可以适应多个不同问题的解决方案,否则您只需要阅读 :)
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"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}