条件加入 Eloquent

Conditional Join Eloquent

我一直在查看有关堆栈溢出的多个问题,也在 eloquent 文档中查找,但我似乎找不到如何仅在变量为真时才加入 table。

我有我的 eloquent 查询。

$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 的,我希望用户能够指定他们是否希望 returns 结果中包含某些 table。我还没有找到关于此类功能的 post。当我 运行 我的示例代码与测试 if 语句时,我得到一个错误:

Parse error: syntax error, unexpected '}'

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

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

我把它留在这里以备将来参考,因为这种类型的加入的数据量不是很大。我也尝试过使用 eloquent 连接方法,这些方法也有效,我只是将它留在数组中以供显示。