fixed:修复CatchJoin无法连接同一个模型两次

This commit is contained in:
JaguarJack 2020-12-13 10:16:28 +08:00
parent 9118e07d7b
commit afe70d39b9

View File

@ -13,7 +13,7 @@ class CatchQuery extends Query
/** /**
* *
* @time 2020年01月13日 * @time 2020年01月13日
* @param string $model * @param mixed $model
* @param string $joinField * @param string $joinField
* @param string $currentJoinField * @param string $currentJoinField
* @param array $field * @param array $field
@ -21,29 +21,38 @@ class CatchQuery extends Query
* @param array $bind * @param array $bind
* @return CatchQuery * @return CatchQuery
*/ */
public function catchJoin(string $model, string $joinField, string $currentJoinField, array $field = [], string $type = 'INNER', array $bind = []): CatchQuery public function catchJoin($model, string $joinField, string $currentJoinField, array $field = [], string $type = 'INNER', array $bind = []): CatchQuery
{ {
$table = app($model)->getTable(); $tableAlias = null;
if (is_string($model)) {
$table = app($model)->getTable();
} else {
list($model, $tableAlias) = $model;
$table = app($model)->getTable();
}
// 合并字段 // 合并字段
$this->options['field'] = array_merge($this->options['field'] ?? [], array_map(function ($value) use ($table) { $this->options['field'] = array_merge($this->options['field'] ?? [], array_map(function ($value) use ($table, $tableAlias) {
return $table . '.' . $value; return ($tableAlias ? : $table) . '.' . $value;
}, $field)); }, $field));
return $this->join($table, sprintf('%s.%s=%s.%s', $table, $joinField, $this->getAlias(), $currentJoinField), $type, $bind); return $this->join($tableAlias ? sprintf('%s %s', $table, $tableAlias) : $table
, sprintf('%s.%s=%s.%s', $tableAlias ? $tableAlias : $table, $joinField, $this->getAlias(), $currentJoinField), $type, $bind);
} }
/** /**
* *
* @time 2020年01月13日 * @time 2020年01月13日
* @param string $model * @param mixed $model
* @param string $joinField * @param string $joinField
* @param string $currentJoinField * @param string $currentJoinField
* @param array $field * @param array $field
* @param array $bind * @param array $bind
* @return CatchQuery * @return CatchQuery
*/ */
public function catchLeftJoin(string $model, string $joinField, string $currentJoinField, array $field = [], array $bind = []): CatchQuery public function catchLeftJoin($model, string $joinField, string $currentJoinField, array $field = [], array $bind = []): CatchQuery
{ {
return $this->catchJoin($model, $joinField, $currentJoinField, $field,'LEFT', $bind); return $this->catchJoin($model, $joinField, $currentJoinField, $field,'LEFT', $bind);
} }
@ -51,14 +60,14 @@ class CatchQuery extends Query
/** /**
* *
* @time 2020年01月13日 * @time 2020年01月13日
* @param string $model * @param mixed $model
* @param string $joinField * @param string $joinField
* @param string $currentJoinField * @param string $currentJoinField
* @param array $field * @param array $field
* @param array $bind * @param array $bind
* @return CatchQuery * @return CatchQuery
*/ */
public function catchRightJoin(string $model, string $joinField, string $currentJoinField, array $field = [], array $bind = []): CatchQuery public function catchRightJoin($model, string $joinField, string $currentJoinField, array $field = [], array $bind = []): CatchQuery
{ {
return $this->catchJoin($model, $joinField, $currentJoinField, $field,'RIGHT', $bind); return $this->catchJoin($model, $joinField, $currentJoinField, $field,'RIGHT', $bind);
} }