2016-10-28 40 views
0

我試圖在laravel 5.3.I使用組查詢抓語法錯誤或訪問衝突:1055表達#17組由

SQLSTATE [42000]:語法錯誤或訪問衝突:1055表達#17 SELECT列表不在GROUP BY子句中,並且包含非聚集列'testtravel.country.name',它在功能上不依賴於GROUP BY子句中的列;這是用的sql_mode = only_full_group_by(SQL不兼容:

select `travel_request`.*, `travel_request`.`id` as `travel_id`, 
     `department`.`name` as `dept_name`, `users`.`firstname` as `approver_name`, 
     `travel_purpose`.`purpose`, `country`.`name` as `country_name`, 
     `traveling_details`.`from_date`, `traveling_details`.`to_date`, 
     `travel_request_status`.`status` 
    from `travel_request` 
    inner join `department` ON `travel_request`.`department_id` = `department`.`id` 
    inner join `users` ON `travel_request`.`approver_id` = `users`.`id` 
    inner join `travel_purpose` ON `travel_request`.`travel_purpose_id` = `travel_purpose`.`id` 
    inner join `traveling_details` ON `travel_request`.`id` = `traveling_details`.`travel_request_id` 
    inner join `country` ON `country`.`id` = `traveling_details`.`country_id` 
    inner join `travel_request_status` ON `travel_request`.`status_id` = `travel_request_status`.`id` 
    where `travel_request`.`approver_id` = 187 
     and `travel_request`.`status_id` != 4 
    group by `travel_request`.`id` 
    limit 2 offset 0) 

我複製了查詢,並sql.Its運行mysql.I工作以及嘗試作爲

$users = DB::table('travel_request') 
     ->join('department', 'travel_request.department_id', '=', 'department.id') 
     ->join('users', 'travel_request.approver_id', '=', 'users.id') 
     ->join('travel_purpose', 'travel_request.travel_purpose_id', '=', 'travel_purpose.id') 
     ->join('traveling_details', 'travel_request.id','=','traveling_details.travel_request_id') 
     ->join('country','country.id', '=', 'traveling_details.country_id') 
     ->join('travel_request_status','travel_request.status_id', '=', 'travel_request_status.id') 
     ->select('travel_request.*', 'travel_request.id as travel_id','department.name as dept_name','users.firstname as approver_name','travel_purpose.purpose','country.name as country_name','traveling_details.from_date','traveling_details.to_date','travel_request_status.status')->where('travel_request.approver_id', $user_id)->where('travel_request.status_id','!=','4')->GROUPBY ('travel_request.id')->paginate(2); 

通過

解決

但是爲了禁用,只需轉到config/database.php並更改嚴格標記

'mysql' => [ 
      . 
      . 
      . 
      'strict' => false, 
      //'strict' => true, 
      . 
      . 
     ], 

回答

0

您沒有使用聚合函數所以可能是你使用GROUP BY訂購的結果(或獲得不同的值) 僅specifing在所有參與的團體,而不是列開始爲MySQL 5.6中使用組可能的部分規範。

通過訂貨也depreacted

因此,如果您使用的排序方式,而不是按

select 
     `travel_request`.* 
     , `travel_request`.`id` as `travel_id` 
     , `department`.`name` as `dept_name` 
     , `users`.`firstname` as `approver_name` 
     , `travel_purpose`.`purpose` 
     , `country`.`name` as `country_name` 
     , `traveling_details`.`from_date` 
     , `traveling_details`.`to_date` 
     , `travel_request_status`.`status` 
    from `travel_request` 
    inner join `department` on `travel_request`.`department_id` = `department`.`id` 
    inner join `users` on `travel_request`.`approver_id` = `users`.`id` 
    inner join `travel_purpose` on `travel_request`.`travel_purpose_id` = `travel_purpose`.`id` 
    inner join `traveling_details` on `travel_request`.`id` = `traveling_details`.`travel_request_id` 
    inner join `country` on `country`.`id` = `traveling_details`.`country_id` 
    inner join `travel_request_status` on `travel_request`.`status_id` = `travel_request_status`.`id` 
    where `travel_request`.`approver_id` = 187 and `travel_request`.`status_id` != 4 
    order by `travel_request`.`id` limit 2 offset 0) 

此行爲使用正確的順序使用組是控制器通過sql_mode=only_full_group_by你可以改變這個參數有關使用舊行爲https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

1

打開config/database.php文件並更改mysql配置數組如下:

'strict' => true

'strict' => false

務必閱讀本answer有關錯誤的詳細信息。

相關問題