PHP에서 Laravel 관련 쿼리에서 반환된 오류 id에 대한 해결 방법에 대한 자세한 설명

墨辰丷
풀어 주다: 2023-03-27 19:04:02
원래의
1637명이 탐색했습니다.

이 글에서는 Laravel 관련 쿼리에서 반환된 오류 ID에 대한 해결 방법을 주로 소개합니다. 매우 훌륭하고 참고할 만한 가치가 있으므로, 필요한 친구가 참고할 수 있습니다.

Laravel Eloquent에 있는 Join 관련 쿼리를 사용하세요. 같은 이름 필드(예: id)가 있는 경우 해당 값은 기본적으로 같은 이름을 가진 후속 필드로 덮어쓰여 예상치 못한 결과를 반환합니다. 예를 들어 다음 관련 쿼리는

$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')
 ->where('priorities.type', 1)
 ->orderBy('priorities.total_score', 'desc')
 ->orderBy('touch.created_at', 'desc')
 ->get();
로그인 후 복사
로그인 후 복사

$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')
 ->where('priorities.type', 1)
 ->orderBy('priorities.total_score', 'desc')
 ->orderBy('touch.created_at', 'desc')
 ->get();
로그인 후 복사
로그인 후 복사

두 테이블 모두 id 필드를 갖습니다. 이와 같이 쿼리를 구성하면 반환되는 쿼리 결과는 다음과 같습니다. :

Laravel 关联查询返回错误的 idLaravel 관련 쿼리에서 잘못된 ID가 반환됩니다

여기서 id 값은 우선 순위 테이블의 id 필드가 아니라, 실행된 sql 문이 출력되는 경우:

select * from `priorities` 
right join `touch` 
on `priorities`.`touch_id` = `touch`.`id` 
where `priorities`.`type` = '1' 
order by `priorities`.`total_score` desc, `touch`.`created_at` desc
로그인 후 복사
로그인 후 복사

select * from `priorities` 
right join `touch` 
on `priorities`.`touch_id` = `touch`.`id` 
where `priorities`.`type` = '1' 
order by `priorities`.`total_score` desc, `touch`.`created_at` desc
로그인 후 복사
로그인 후 복사

쿼리 결과는 그림과 같습니다.

SQL 쿼리를 사용한 결과는 실제로 다른 테이블의 동일한 이름을 가진 id 필드의 이름이 id1입니다. 기본값이지만 Laravel에서 반환한 id 값은 그림에 표시된 것과 다릅니다. id 필드는 동일한 이름을 가진 다른 테이블의 필드로 덮어써졌습니다.

해결책은 필드를 지정하는 select 메서드를 추가하고 쿼리 문 코드를 올바르게 구성하는 것입니다.

PHP

$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user'])
 ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')
 ->where('priorities.type', 1)
 ->orderBy('priorities.total_score', 'desc')
 ->orderBy('touch.created_at', 'desc')
 ->get();
로그인 후 복사
로그인 후 복사

$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user'])
 ->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')
 ->where('priorities.type', 1)
 ->orderBy('priorities.total_score', 'desc')
 ->orderBy('touch.created_at', 'desc')
 ->get();
로그인 후 복사
로그인 후 복사

이렇게 하면 문제가 해결되고 Laravel에 주의를 기울여야 합니다. two in the future 테이블을 조인할 때 반환되는 필드를 지정하는 것이 가장 좋습니다.

라라벨 버그인가요? 필드의 값이 동일한 이름의 필드 값으로 덮어쓰여지면 기본적으로 실행을 계속하는 대신 오류를 보고해야 합니까?

github에서도 누군가가 같은 문제를 제기했고, 작성자도 해결책을 제시했지만 더 나은 해결책은 없습니다.

Laravel 버전: 5.3

링크: https://github.com/laravel/framework/issues/4962

위 내용은 이 글의 전체 내용이며, 모든 분들의 학습에 도움이 되기를 바랍니다. Related Related Residentations : Apple App in-App 구매 후 서버에 대한 보조 검증 (프로젝트 경험) PHP+MySQL의 수동 주입. PHP

이 프로젝트는 WeChat QR 코드 스캐닝 결제 API(국내 결제)를 통합합니다


위 내용은 PHP에서 Laravel 관련 쿼리에서 반환된 오류 id에 대한 해결 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿