diff --git a/library/think/model/Relation.php b/library/think/model/Relation.php index 81b496ad..4869e526 100644 --- a/library/think/model/Relation.php +++ b/library/think/model/Relation.php @@ -77,6 +77,32 @@ abstract class Relation return (new $this->model)->toCollection($resultSet); } + protected function getQueryFields($model) + { + $fields = $this->query->getOptions('field'); + return $this->getRelationQueryFields($fields, $model); + } + + protected function getRelationQueryFields($fields, $model) + { + if ($fields) { + + if (is_string($fields)) { + $fields = explode(',', $fields); + } + + foreach ($fields as &$field) { + if (false === strpos($field, '.')) { + $field = $model . '.' . $field; + } + } + } else { + $fields = $model . '.*'; + } + + return $fields; + } + /** * 执行基础查询(仅执行一次) * @access protected diff --git a/library/think/model/relation/BelongsToMany.php b/library/think/model/relation/BelongsToMany.php index 79684fe7..9eeb88dd 100644 --- a/library/think/model/relation/BelongsToMany.php +++ b/library/think/model/relation/BelongsToMany.php @@ -376,7 +376,9 @@ class BelongsToMany extends Relation // 关联查询封装 $tableName = $this->query->getTable(); $table = $this->pivot->getTable(); - $query = $this->query->field($tableName . '.*') + $fields = $this->getQueryFields($tableName); + + $query = $this->query->field($fields) ->field(true, false, $table, 'pivot', 'pivot__'); if (empty($this->baseQuery)) {