改进自关联查询多级调用问题

This commit is contained in:
thinkphp
2018-01-05 17:28:21 +08:00
parent 1f06d05cbe
commit ea2ce8f8de
4 changed files with 34 additions and 23 deletions

View File

@@ -57,18 +57,18 @@ abstract class OneToOne extends Relation
*/
public function eagerly(Query $query, $relation, $subRelation, $closure, $first)
{
$name = Loader::parseName(basename(str_replace('\\', '/', $query->getModel())));
$alias = $name;
$name = Loader::parseName(basename(str_replace('\\', '/', get_class($query->getModel()))));
if ($first) {
$table = $query->getTable();
$query->table([$table => $alias]);
$query->table([$table => $name]);
if ($query->getOptions('field')) {
$field = $query->getOptions('field');
$query->removeOption('field');
} else {
$field = true;
}
$query->field($field, false, $table, $alias);
$query->field($field, false, $table, $name);
$field = null;
}
@@ -78,9 +78,9 @@ abstract class OneToOne extends Relation
$query->via($joinAlias);
if ($this instanceof BelongsTo) {
$query->join([$joinTable => $joinAlias], $alias . '.' . $this->foreignKey . '=' . $joinAlias . '.' . $this->localKey, $this->joinType);
$query->join([$joinTable => $joinAlias], $name . '.' . $this->foreignKey . '=' . $joinAlias . '.' . $this->localKey, $this->joinType);
} else {
$query->join([$joinTable => $joinAlias], $alias . '.' . $this->localKey . '=' . $joinAlias . '.' . $this->foreignKey, $this->joinType);
$query->join([$joinTable => $joinAlias], $name . '.' . $this->localKey . '=' . $joinAlias . '.' . $this->foreignKey, $this->joinType);
}
if ($closure) {