【问题标题】: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');

但我不知道我的表之前加入与否。我该怎么做?

【问题讨论】:

    标签: php laravel laravel-5 laravel-query-builder


    【解决方案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;
          }
          

          【讨论】:

            猜你喜欢
            • 2013-08-07
            • 2017-03-29
            • 2014-07-22
            • 2015-01-15
            • 1970-01-01
            • 1970-01-01
            • 2016-10-07
            • 2020-07-07
            相关资源
            最近更新 更多