Allow to specify a custom alias for joined tables.
This commit is contained in:
parent
22c63043e6
commit
3b2658e423
3 changed files with 19 additions and 12 deletions
|
@ -277,7 +277,8 @@ class PostgreSqlAdapter extends DatabaseAdapter
|
|||
foreach ($joins as $join)
|
||||
{ // For each join clause, build its conditions and append the built bindings.
|
||||
[$onSql, $onBindings] = $this->buildWhere($join->getConditions(), "ON");
|
||||
$sql .= "$join->type JOIN \"$join->table\" $onSql ";
|
||||
$asSql = !empty($join->as) ? " AS $join->as" : "";
|
||||
$sql .= "$join->type JOIN \"$join->table\"$asSql $onSql ";
|
||||
array_push($bindings, ...$onBindings);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,11 +27,12 @@ trait HasJoin
|
|||
* Create a new join clause.
|
||||
* @param string $type Type of the join clause.
|
||||
* @param string $table Joined table.
|
||||
* @param string|null $as Joined table alias.
|
||||
* @return JoinBuilder New join clause builder.
|
||||
*/
|
||||
public function join(string $type, string $table): JoinBuilder
|
||||
public function join(string $type, string $table, ?string $as = null): JoinBuilder
|
||||
{
|
||||
$join = new JoinBuilder($this, $type, $table);
|
||||
$join = new JoinBuilder($this, $type, $table, $as);
|
||||
$this->joins[] = $join;
|
||||
return $join;
|
||||
}
|
||||
|
@ -39,40 +40,44 @@ trait HasJoin
|
|||
/**
|
||||
* Create a new inner join clause.
|
||||
* @param string $table Joined table.
|
||||
* @param string|null $as Joined table alias.
|
||||
* @return JoinBuilder New join clause builder.
|
||||
*/
|
||||
public function innerJoin(string $table): JoinBuilder
|
||||
public function innerJoin(string $table, ?string $as = null): JoinBuilder
|
||||
{
|
||||
return $this->join(JoinBuilder::INNER, $table);
|
||||
return $this->join(JoinBuilder::INNER, $table, $as);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new outer join clause.
|
||||
* @param string $table Joined table.
|
||||
* @param string|null $as Joined table alias.
|
||||
* @return JoinBuilder New join clause builder.
|
||||
*/
|
||||
public function outerJoin(string $table): JoinBuilder
|
||||
public function outerJoin(string $table, ?string $as = null): JoinBuilder
|
||||
{
|
||||
return $this->join(JoinBuilder::OUTER, $table);
|
||||
return $this->join(JoinBuilder::OUTER, $table, $as);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new left join clause.
|
||||
* @param string $table Joined table.
|
||||
* @param string|null $as Joined table alias.
|
||||
* @return JoinBuilder New join clause builder.
|
||||
*/
|
||||
public function leftJoin(string $table): JoinBuilder
|
||||
public function leftJoin(string $table, ?string $as = null): JoinBuilder
|
||||
{
|
||||
return $this->join(JoinBuilder::LEFT, $table);
|
||||
return $this->join(JoinBuilder::LEFT, $table, $as);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new right join clause.
|
||||
* @param string $table Joined table.
|
||||
* @param string|null $as Joined table alias.
|
||||
* @return JoinBuilder New join clause builder.
|
||||
*/
|
||||
public function rightJoin(string $table): JoinBuilder
|
||||
public function rightJoin(string $table, ?string $as = null): JoinBuilder
|
||||
{
|
||||
return $this->join(JoinBuilder::RIGHT, $table);
|
||||
return $this->join(JoinBuilder::RIGHT, $table, $as);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,9 @@ class JoinBuilder
|
|||
* @param mixed $query The calling query.
|
||||
* @param string $type Join type (INNER, OUTER, LEFT, RIGHT, ...).
|
||||
* @param string $table The table to join.
|
||||
* @param string|null $as Joined table alias.
|
||||
*/
|
||||
public function __construct(protected mixed $query, public readonly string $type, public readonly string $table)
|
||||
public function __construct(protected mixed $query, public readonly string $type, public readonly string $table, public readonly ?string $as = null)
|
||||
{}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue