修正hasMany关联的has方法

This commit is contained in:
thinkphp
2017-02-04 20:08:30 +08:00
parent fb8415e653
commit fcfe91a97d

View File

@@ -45,7 +45,7 @@ class HasMany extends Relation
public function getRelation($subRelation = '', $closure = null) public function getRelation($subRelation = '', $closure = null)
{ {
if ($closure) { if ($closure) {
call_user_func_array($closure, [& $this->query]); call_user_func_array($closure, [ & $this->query]);
} }
return $this->relation($subRelation)->select(); return $this->relation($subRelation)->select();
} }
@@ -125,7 +125,7 @@ class HasMany extends Relation
$count = 0; $count = 0;
if (isset($result->$localKey)) { if (isset($result->$localKey)) {
if ($closure) { if ($closure) {
call_user_func_array($closure, [& $this->query]); call_user_func_array($closure, [ & $this->query]);
} }
$count = $this->query->where([$this->foreignKey => $result->$localKey])->count(); $count = $this->query->where([$this->foreignKey => $result->$localKey])->count();
} }
@@ -141,14 +141,14 @@ class HasMany extends Relation
public function getRelationCountQuery($closure) public function getRelationCountQuery($closure)
{ {
if ($closure) { if ($closure) {
call_user_func_array($closure, [& $this->query]); call_user_func_array($closure, [ & $this->query]);
} }
return $this->query->where([ return $this->query->where([
$this->foreignKey => [ $this->foreignKey => [
'exp', 'exp',
'=' . $this->parent->getTable() . '.' . $this->parent->getPk() '=' . $this->parent->getTable() . '.' . $this->parent->getPk(),
] ],
])->fetchSql()->count(); ])->fetchSql()->count();
} }
@@ -167,7 +167,7 @@ class HasMany extends Relation
$foreignKey = $this->foreignKey; $foreignKey = $this->foreignKey;
// 预载入关联查询 支持嵌套预载入 // 预载入关联查询 支持嵌套预载入
if ($closure) { if ($closure) {
call_user_func_array($closure, [& $model]); call_user_func_array($closure, [ & $model]);
} }
$list = $model->where($where)->with($subRelation)->select(); $list = $model->where($where)->with($subRelation)->select();
@@ -217,13 +217,14 @@ class HasMany extends Relation
* @param string $operator 比较操作符 * @param string $operator 比较操作符
* @param integer $count 个数 * @param integer $count 个数
* @param string $id 关联表的统计字段 * @param string $id 关联表的统计字段
* @param string $joinType JOIN类型
* @return Query * @return Query
*/ */
public function has($operator = '>=', $count = 1, $id = '*') public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER')
{ {
$table = $this->query->getTable(); $table = $this->query->getTable();
return $this->parent->db()->alias('a') return $this->parent->db()->alias('a')
->join($table . ' b', 'a.' . $this->localKey . '=b.' . $this->foreignKey, $this->joinType) ->join($table . ' b', 'a.' . $this->localKey . '=b.' . $this->foreignKey, $joinType)
->group('b.' . $this->foreignKey) ->group('b.' . $this->foreignKey)
->having('count(' . $id . ')' . $operator . $count); ->having('count(' . $id . ')' . $operator . $count);
} }