【问题标题】:Conditional Join Eloquent条件连接 Eloquent
【发布时间】:2018-06-25 13:39:23
【问题描述】:

我一直在查看有关堆栈溢出的多个问题以及雄辩的文档,但我似乎无法找到仅当变量为真时如何加入表。

我有一个雄辩的问题。

$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 '}'

【问题讨论】:

  • 错误本身告诉你,我也看到了一些语法错误。也许这可以帮助您处理这段代码。
  • 是的,我意识到错误告诉我您不允许在加入回调中使用大括号。我在下面回答了我的问题。这个问题与一个类似的语法或函数有关,可以用来完成我上面试图完成的事情。上面的邮政编码中也没有其他语法错误,只有if($test) {} 段,这是我的问题所在。

标签: laravel eloquent lumen laravel-eloquent laravel-query-builder


【解决方案1】:

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

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

我把它留在这里以供将来参考,因为这种连接类型的数据量不是很大。我也尝试过使用 eloquent join 方法,这些方法也可以工作,我只是将它放在一个数组中用于显示目的。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2017-08-25
    • 2014-01-10
    • 2014-10-18
    • 1970-01-01
    • 2018-04-12
    • 2015-10-26
    • 2019-01-30
    • 2015-08-17
    相关资源
    最近更新 更多