如何在Laravel 5.3中创建动态查询?

7
我想做的事情是在Laravel 5.3中根据请求参数进行动态查询,因此在请求中我将得到列名和查询的过滤器,但是我不知道要从哪些表格中处理数据。
我的问题是如何确定该查询的表格?或者我应该将表格和相应的列存储在一个数据库表中,并将请求参数与该表进行匹配,以便获取表格名称并能够放入该查询中?
但我认为这样会使我处理速度变慢? 所以我发布了这个问题。请帮我找到最适合我需要的动态查询的最佳方案。
更新
请求将是这样的:
{
  "col": ['fname', 'lname'],
  "offset": 1,
  "limit": 25,
  "order": [ASC, fname, lname],
  "filter": [
    {
      "col": "id",
      "op": "=",
      "val": 8
    }
  ]
}

所以这是我的请求,表名和相关列都在一个表中。

1
你能否提供一些数据库中存在的数据示例,预期的筛选请求类型以及在正常运行时数据的期望格式? - Carter Fort
1个回答

8

只需使用查询构建器

$query = DB::table($tableName);

// ...some logic...

foreach ($filters as $filter) {
    $query->where($filter['col'], $filter['op'], $filter['val']);
}

// ...more logic...

if (isset($limit)) {
     $query->limit($limit);
}

if (isset($columns)) {
    // get desired columns
    $records = $query->get($columns);
} else {
    $records = $query->get();
}

1
好的。你能否建议我如何根据请求参数来决定表格呢?因为在请求中,我只有列和过滤器,但我希望它对所有人都通用。所以表格名称是可变的。 - SaMeEr
1
我应该将表和相应的列名存储在数据库中,并将请求的参数与该列匹配并获取该表名吗?这会影响整体性能吗? - SaMeEr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接