From 513f1f32f7561b4ecce69ddf574f3cf4872479bd Mon Sep 17 00:00:00 2001 From: thinkphp Date: Tue, 9 May 2017 15:38:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9Bbelongstomany=E7=9A=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/model/Relation.php | 26 +++++++++++++++++++ .../think/model/relation/BelongsToMany.php | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) 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)) {