我有一个在Laravel框架上运行的跟踪系统。跟踪系统允许用户使用JSON格式的结构从网站输入他们的跟踪查询,然后将其传递到服务器进行处理。然后,服务器将根据输入中给出的JSON结构查询数据库中的所有相关数据。当前的代码结构有点多余,如下所示:
if($a == true)
{
$data = DB::table('table')
->select('item1')
->where('item2', '=', $a)
->get();
if($limit !== null)
{
$data = DB::table('table')
->select('item1')
->where('item2', '=', $a)
->take($limit)
->get();
}
}
/*the code goes on and on*/
注意在上面的示例代码中,有什么办法可以减少代码的冗余部分吗?就像在我脑海里说的那样:
public function process()
{
$data = DB::table('table')
->select('item1')
$a == true ? "->where('item2', '=', $a)" : '';
$limit !== null ? "->take($limit)" : '';
->get();
}
因此,您可以看到缩短的代码与长版本完全相同。我理解我的想法在真实场景中无法使用,但有没有类似的方法可以像我想的那样工作?
提前致谢
答案 0 :(得分:1)
构建器构建查询,但在运行get
方法之前不会获取数据。尝试:
if($a == true)
{
$query = DB::table('table')
->select('item1')
->where('item2', '=', $a);
if($limit !== null)
{
$query->limit($limit);
}
$data = $query->get();
}
limit
与take
相同。这只是一个别名。
答案 1 :(得分:0)
我通常用它做什么
$query = \DB::table('table');
$query->select('item1'); //i prefer $query->select(\DB::raw('table.item1 AS item1'));
if($a)
{
$query->where('item2', '=', $a);
}
if($limit)
{
$query->take($limit);
}
$data = $query->get();
通过这种方式,您可以根据要添加的查询的其他过滤器进行调整。