关联预载入查询支持关联统计

This commit is contained in:
thinkphp
2016-12-22 12:52:13 +08:00
parent cd57d97f36
commit 9657ee01b1
5 changed files with 52 additions and 16 deletions

View File

@@ -13,6 +13,7 @@ namespace think\model\relation;
use think\Db;
use think\db\Query;
use think\Loader;
use think\Model;
use think\model\Relation;
@@ -60,9 +61,10 @@ class MorphMany extends Relation
* @param string $subRelation 子关联名
* @param \Closure $closure 闭包
* @param string $class 数据集对象名 为空表示数组
* @param bool $count 是否统计
* @return void
*/
public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure, $class)
public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure, $class, $count)
{
$morphType = $this->morphType;
$morphKey = $this->morphKey;
@@ -89,6 +91,10 @@ class MorphMany extends Relation
if (!isset($data[$result->$pk])) {
$data[$result->$pk] = [];
}
if ($count) {
// 关联统计
$result->setAttr(Loader::parseName($relation) . '_count', count($data[$result->$pk]));
}
$result->setAttr($relation, $this->resultSetBuild($data[$result->$pk], $class));
}
}
@@ -102,9 +108,10 @@ class MorphMany extends Relation
* @param string $subRelation 子关联名
* @param \Closure $closure 闭包
* @param string $class 数据集对象名 为空表示数组
* @param bool $count 是否统计
* @return void
*/
public function eagerlyResult(&$result, $relation, $subRelation, $closure, $class)
public function eagerlyResult(&$result, $relation, $subRelation, $closure, $class, $count)
{
$morphType = $this->morphType;
$morphKey = $this->morphKey;
@@ -112,6 +119,10 @@ class MorphMany extends Relation
$pk = $result->getPk();
if (isset($result->$pk)) {
$data = $this->eagerlyMorphToMany([$morphKey => $result->$pk, $morphType => $type], $relation, $subRelation, $closure);
if ($count) {
// 关联统计
$result->setAttr(Loader::parseName($relation) . '_count', count($data[$result->$pk]));
}
$result->setAttr($relation, $this->resultSetBuild($data[$result->$pk], $class));
}
}