如何检查表是不是已在 Laravel 查询生成器中加入
Posted
技术标签:
【中文标题】如何检查表是不是已在 Laravel 查询生成器中加入【英文标题】:How to check if table is already joined in Laravel Query Builder如何检查表是否已在 Laravel 查询生成器中加入 【发布时间】:2019-07-21 00:00:09 【问题描述】:我创建了一个查询。我想将我的表加入学生表:
$query->leftJoin('students', 'learners.student_id', '=', 'students.id');
但我不知道我的表之前加入与否。我该怎么做?
【问题讨论】:
【参考方案1】:如果您使用表别名:
$is_joined = collect($query->joins)->some(function($join)
return strpos($join->table, 'table_name') !== false;
);
【讨论】:
【参考方案2】:另一种解决方案是:
function isJoined($query, $table)
$joins = collect($query->getQuery()->joins);
return $joins->pluck('table')->contains($table);
或更短的方式:
Collection::make($query->getQuery()->joins)->pluck('table')->contains($table);
【讨论】:
【参考方案3】:我找到了这个解决方案:
function joined($query, $table)
$joins = $query->getQuery()->joins;
if($joins == null)
return false;
foreach ($joins as $join)
if ($join->table == $table)
return true;
return false;
if ( joined($query, 'students') )
$query->leftJoin('students', 'learners.student_id', '=', 'students.id');
【讨论】:
【参考方案4】:你应该试试这个:
这里是$clients->joins
(这是JoinClause 对象的数组)并查看JoinClause->table
。
function hasJoin(\Illuminate\Database\Query\Builder $Builder, $table) //$table as table name
foreach($Builder->joins as $JoinClause)
if($JoinClause->table == $table)
return true;
return false;
【讨论】:
以上是关于如何检查表是不是已在 Laravel 查询生成器中加入的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 laravel 查询生成器从表联合的结果中选择列?