Laravel - 仅选择已连接表

时间:2017-04-18 09:28:41

标签: php mysql laravel

这是我的情况我加入了表,但问题是其中一些列与其他表的名称相同。我想知道的是我如何防止这种情况发生。具有相同名称的列是created_at但我只想使用方法' table created_at(methods.created_at)。这是我的代码,以更好地解释我的情况

 $filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by')
      ->leftJoin('roles', 'roles.id', '=', 'users.role_id')
      ->leftJoin('types', 'types.id', '=', 'methods.type_id')
      ->where($request->filters)//will act as a searchmap
      ->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name',
      'types.id AS type_id_typetable', 'types.name AS type_name']);

注意->where是一个对象数组,我将它用作该子句的搜索映射。但我的问题就像我上面所说的那样,表格在某些列上具有相同的名称,例如created_at,其他列并不重要,因为我没有使用它。

问题是,当我通过搜索地图搜索时,如何明确告诉查询我正在使用methods.created_at(在这种情况下,$request->filters['created_at']请如果您需要更多详细信息,请与我们联系。

修改

if($("#date_select_off").val() == "daily") {
        let day = $("#day_date").val();
        filter_list.created_at = day;
      }

在jquery中的这段代码中,我将该键命名为与列相同,以便我可以将它用作php查询中的参数。但我喜欢我最初的问题,我只是不能将其命名为filter_list.methods.created_at,我们非常感谢您的帮助。

编辑2

enter image description here

我如何使用' LIKE'查询该特定键值对?

->where($request->filters)//will act as a searchmap
      ->orWhere('methods.created_at', 'LIKE', $request->filters['methods.created_at'])

我尝试过这样做,但这是错误的,因为键值对已经在第一个where子句上命中了。

编辑3 它可以使用一些改进,但是是的

  $filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by')
      ->leftJoin('roles', 'roles.id', '=', 'users.role_id')
      ->leftJoin('types', 'types.id', '=', 'methods.type_id')
      ->where($request->filters)//will act as a searchmap
      ->orWhere('methods.created_at', 'LIKE', '%' . $request->filters['methods.created_at'] . '%')
      ->get([ 'users.username', 'users.id AS users_id', 'methods.id AS method_id', 'methods.name AS method_name', 'methods.created_at AS method_created_at', 'roles.id AS role_id', 'roles.name AS role_name',
      'types.id AS type_id_typetable', 'types.name AS type_name']);

2 个答案:

答案 0 :(得分:0)

在这种情况下,在where子句中传递完全限定的列名,如:

->where('methods.created_at', '=', $request->filters)

或创建表别名并使用别名,如:

SELECT col from methods as t1, 
...
WHERE t1.col = 'some value';

答案 1 :(得分:0)

根据您的要求更改模型类,以指定要选择的列:

public function someModel() {
  return $this->belongs_to('otherModel')->select(array('id', 'name'));
}