条件加入 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 连接方法,这些方法也有效,我只是将它留在数组中以供显示。
我一直在查看有关堆栈溢出的多个问题,也在 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 连接方法,这些方法也有效,我只是将它留在数组中以供显示。