Laravel DB:select()는 그룹 내의 모든 열을 다음과 같이 요구합니다.
커스텀 쿼리를 실행해야 하며 이 모든 방법을 시도해 보았습니다.
$sql = "SELECT acd.*, DATE_FORMAT(acd.cdate, '%d/%m/%Y') cdate_disp,
GROUP_CONCAT(CONCAT_WS(', ', car.type, car.session, crd.name) SEPARATOR '<br />') rd_names,
acb.booking_status my_booking_status
FROM app_data acd
INNER JOIN crmaccounts ca ON ca.id = acd.client_crm_id
LEFT JOIN crmaccount_rdids car ON car.account_id = ca.id
LEFT JOIN crmrd_ids crd ON crd.id = car.rd_id
LEFT JOIN app_bookings acb ON acb.call_ref_id = acd.call_ref AND acb.user_id = 12391
WHERE 1=1
AND acd.client_crm_id NOT IN (select account_id from bstaff WHERE user_id=12391)
GROUP BY acd.id
ORDER BY acd.cdate, ctiming";
DB:select($sql);
던지다
조명 \ 데이터베이스 \ QueryException ( 42000 ) SQLSTATE [ 42000 ] :구문 오류 또는 액세스 위반: 1055 'mydatabase.acd.call_ref'가 GROUP BY(SQL: ......)에 없습니다.
DB::select($sql);
DB::raw($sql);
DB::select(DB::raw($sql));
//even with pdo
$sth = DB::getPdo()->prepare($sql);
$sth->execute();
$data = $sth->fetchAll(\PDO::FETCH_OBJ);
PDOException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1055 'mydatabase.acd.call_ref' isn't in GROUP BY
작업을 시작하려면 다음 표에 있는 모든 열을 나열하는 방법밖에 없는 것 같습니다.group by
실행은 가능하지만 편리하지는 않습니다.
phpmyadmin에서도 같은 쿼리를 직접 실행할 수 있습니다.그래서 왜 Larabel을 통해 실행할 때 모든 열을 추가하라고 하는지 잘 모르겠습니다.
MariaDB가 설치되어 있으며 Laravel과 PhpMyAdmin이 모두 동일한 인스턴스에 연결되어 있습니다.Larvel 버전은 5.8.5입니다.
여기서도 질문했지만 답변을 찾을 수 없으니 자세한 질문을 봐주세요.https://laracasts.com/discuss/channels/eloquent/query-runs-ok-in-phpmyadmin-but-dbselect-throws-exception
에서는 strict 모드를 디세블로 해 주세요.config/database.php
, mysql 접속 섹션.
이는 Larabel 문제가 아니라 MySQL에 의한 논리적 제한입니다.결과 세트에 없는 열을 추가하는 경우GROUP BY
절, 결과 집합의 이러한 열에 대해 다른 값을 사용할 수 있습니다.
쿼리를 엄밀한 모드(기본적으로 켜져 있음)로 실행하면 예기치 않은 결과가 발생할 수 있으므로 MySQL은 이를 허용하지 않습니다.strict 모드를 끄면 MySQL은 이러한 열에 대해 처음 검색된 결과를 사용합니다.
Laravel 설정 파일에서 strict 모드를 끌 수 있습니다.config/database.php
단, 예측할 수 없기 때문에 쿼리를 변경하는 것이 좋습니다.
완전 모드 체크의 전체 목록은 MySQL 문서(https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-strict에서 확인할 수 있습니다.
Larabel 4.8을 설치하고 Auth도 설정했습니다.또한 역할과 상태라는2개의 테이블을 추가하여 당신의 pdo 코드를 시도했습니다.완벽한 동작입니다!여기, 내 코드를 넣었어.
$sql = "SELECT *
FROM users u
INNER JOIN roles r ON r.id = u.role_id
LEFT JOIN states s ON s.id = u.state_id
WHERE 1=1
GROUP BY u.id
ORDER BY u.id ";
$sth = DB::getPdo()->prepare($sql);
$sth->execute();
$data = $sth->fetchAll(\PDO::FETCH_OBJ);
dd($data);
당신의 DB 구조가 무엇인지 알고 싶습니다.
언급URL : https://stackoverflow.com/questions/55296665/laravel-dbselect-requires-all-columns-in-the-group-by
'programing' 카테고리의 다른 글
MySQL에서 교차 (0) | 2022.09.22 |
---|---|
선과 수평축 사이의 각도는 어떻게 계산하나요? (0) | 2022.09.22 |
WordPress 게시물의 피처 이미지 URL을 얻는 방법 (0) | 2022.09.22 |
Eclipse에서 Maven 종속성을 추가하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
스프링 저장소 내에서 원시 SQL을 사용할 수 있습니까? (0) | 2022.09.22 |