如何检查表是不是已在 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 查询生成器从表联合的结果中选择列?

如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据

Laravel 8 如何连接 2 个表并检查值是不是存在

检查表是不是已在代码优先方法中创建

Laravel如何验证一行中的数据,而不是检查整个表

Laravel 查询构建器和表名