代码之家  ›  专栏  ›  技术社区  ›  Alexander Beyer

条件连接雄辩

  •  1
  • Alexander Beyer  · 技术社区  · 6 年前

    我一直在研究关于堆栈溢出的多个问题,也在雄辩的文档中,我似乎无法找到只有在变量为真时如何连接表。

    我有一个雄辩的问题。

    $test = false;
    $orderBy = 'name'; // Default order by
    $sortBy = 'asc'; // Default sort by
    $wheres[] = ['is_deleted', '=', $is_deleted];
    
    Comm::where($wheres)
          ->select($selects)
          ->join('div', function($join) use($test) {
                if($test) {
                     $join->on('Comm.div_id', '=', 'div.div_id')
                }
            }
          ->orderBy($orderBy, $sortBy)
          ->paginate($per_page, '*', 'page', $page);
    

    现在我知道您可以使用文档连接方法进行连接,如

    ->join('div', 'comm.div_id', '=', 'div.div_id')
    

    是否有任何方法可以完成我正在尝试的条件加法?这是针对api的,我希望用户能够指定是否希望返回结果中包含某些表。我还没有找到关于这种功能的帖子。当我使用test if语句运行示例代码时,我得到一个错误:

    Parse error: syntax error, unexpected '}'
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Alexander Beyer    6 年前

    因此,经过一段时间的反复尝试,我发现可以使用条件子句来帮助连接表。

    $comm = Comm::select($selects)
                  ->when($useJoins, function($query) use ($withs) {
                      return $query->with($withs);
                  }) 
                  ->orderBy($orderBy, $sortBy)
                  ->paginate($per_page, '*', 'page', $page);
    

    我将此留作将来参考,因为这种类型的连接没有太多的数据。我还尝试了一些雄辩的连接方法,这些方法也很有效,我只是把它放在一个数组中,以便于显示。