2017-03-12 1 views
0
1. MySQL :  

     SELECT a.*,COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

       FROM manifests a 
       JOIN truck_entry_regs b ON a.id = b.manf_id 

        LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

       WHERE a.manifest='550/7' 
       GROUP BY a.id 


2.Laravel 5.4 
    $results = DB::select('SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

    FROM manifests a 
    JOIN truck_entry_regs b ON a.id = b.manf_id 

     LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

    WHERE a.manifest=? 
    GROUP BY a.id', ['550/7']) 

동일한 쿼리가 있습니다. 첫 번째 쿼리는 MySQL (Sqlyog)에서 잘 실행됩니다. 난 내 laravel 5.4 응용 프로그램을 (두 번째 쿼리를) 그것을 실행하는 경우 그러나 그것은 말한다 :Laravel 5.4 Raw가 예상대로 작동하지 않지만 mySQL에서 작동 중

QueryException in Connection.php line 647: 
SQLSTATE[42000]: Syntax error or access violation: 1055 'dbblpa.a.port_id' isn't in GROUP BY (SQL: SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck 

FROM manifests a 
JOIN truck_entry_regs b ON a.id = b.manf_id 

LEFT JOIN truck_deliverys d ON a.id = d.manf_id 

WHERE a.manifest=550/7 
GROUP BY a.id) 

어떻게 내가 가입 한 후 다른 테이블에서 계속있는 테이블에서 모든 데이터를 반환 할 수 있습니까? select.a, a.name, COUNT (DISTINCT b.id)와 같이 select에 a.id, a.name을 추가하고 GROUP BY에 a.id 및 a.name을 추가하면 작동합니다. 질문에 count로 테이블의 모든 열을 반환하면 그룹의 모든 열을 추가해야합니까? 나는 그것이 이상하다는 것을 안다! 그런 다음 어떻게 laravel 5.4 쿼리 빌더에서 예상되는 결과를 얻을 수 있습니까?

+0

'manifests .id'는 기본 키입니까? 또는 적어도 유일한? –

+0

기본 키입니다. 그러나 나는 truck_deliverys 또는 truck_entry_reg와 명시 적으로 외래 키를 만들지 않았습니다. – Fawel

+0

FK는이 문제와 관련이 없습니다. –

답변

2

Laravel 5.3 및 5.4는 기본값 당 mysql에 엄격 모드를 사용합니다. 즉, ONLY_FULL_GROUP_BY SQL 모드도 사용할 수 있습니다. 그러나 MySQL 버전이 5.7.5 이상인 경우 테이블의 기본 키로 그룹화하고 SELECT 절에서 해당 테이블의 모든 열을 PK에 기능적으로 종속되어 있기 때문에 사용할 수 있습니다.

MySQL 5.7.5 이상에서는 기능 의존성 검색을 구현합니다. ONLY_FULL_GROUP_BY SQL 모드가 활성화 된 경우 (기본값) MySQL은 선택 목록 HAVING 조건 또는 ORDER BY 목록이 GROUP BY 절에 이름도 지정되지 않은 비 집합 열을 참조하는 쿼리도 거부합니다. 기능적으로 그것들에 의존한다. ( 5.7.5하기 전에, MySQL은 기능 종속성을 감지하지 않고 ONLY_FULL_GROUP_BY는 기본적으로 사용되지 않습니다

(MySQL Handling of GROUP BY를)

옵션은 다음과 같습니다.

업그레이드 MySQL은 적어도 5.7.5에

또는 (config/database.php)

// .. 
'connections' => [ 
    // .. 
    'mysql' => [ 
     // .. 
     'strict' => false, 
     // .. 
    ], 
    // .. 
] 
0 laravels DB를 설정에서 엄격 모드를 해제

업데이트

나쁜 소식 MariaDB (그리고 XAMPP)에 대한 사용자 : MariaDB는 (아직)은 "함수 종속의 감지"를 지원하지 않는 것 같습니다. 내가 찾을 수있는 건이 ticket입니다.

+0

사용 중 - MySql '5.1.58-community'(SELECT VERSION의 결과()). 그것은 작동합니다. 나는 'strict'=> false로 변경했다. – Fawel

관련 문제