Laavel에서 쿼리 생성기의 Join을 사용해서 검색 기능을 만들다가 빠졌어요.
4866 단어 Laravel
Eloquentモデル
조회 생성기join()
를 사용하여 관련 표의 열을 선별한 후검색 대상이 아닌 모델의 실례가 한 시간 동안 고민으로 돌아왔다.
총결산
Eloquentモデル
쿼리 생성기join()
를 사용하여 인스턴스를 획득한 후여러 열이 있기 때문
id
예상 밖의 실례를 되돌아오다.↓
같은 열 이름이 Laavel 내의 처리에 의해 무시됩니다.
가져오는 열을 압축합니다!
디테일
예를 들면 이런 코드.
$searched_posts = Post::join('comments', 'posts.id', '=', 'comments.posts_id')
->where('comments.text', 'like', '%あいうえお%')->get();
Select()
전제는 표와 posts
표에 모두'comments
'열이 있다는 것이다.위 코드가 SQL로 변환되면 이런 느낌일 거예요.
select * from posts
inner join comments on posts.id = comments.post_id
where comments.text LIKE '%あいうえお%';
SQL의 실행 결과가 다음과 같다고 가정합니다.id
post_content
id
text
1
아아아아
2
남편
3
엉엉
3
남편
5
읊다, 읊조리다
4
남편
현재
id
모델 인스턴스 3개 얻기제 생각에는
Post
각자 것 같아요. post_content
왜 완전히 다른 포스트를 얻었는지 모르겠다.네.
「あああ」「ううう」「おおお」
열이 중첩되어 있음id
덮어쓰기posts.id
는comments.id
,id
,2
3
로 모델의 실례로 얻어졌다.해결책
select에서 추출한 열을 축소합니다.
$searched_posts = Post::select('posts.*')->join('comments', 'posts.id', '=', 'comments.posts_id')
->where('comments.text
', 'like', '%あいうえお%')->get();
4
와 같이 가져올 열을 줄여서 Post
열이 중복되지 않도록 합니다.이런 관건을 알면 바로 해결할 수 있고, 모르면 쉽게 빠져들기 쉽다.
라벨을 기억할 때 적당한 포인트를 먼저 파악하고 싶어요
검색어 생성기 Join을 사용해서 검색하는 건 좀 아닌 것 같아요.
더 좋은 방법이 있으면 알려주세요.
select('posts.*')
사용해도 될까요?Post::whereHas('Comment', function($comment){
$comment->where('text', 'like', '%あいうえお%');
이상, 도움이 되었으면 좋겠습니다.참고 자료
laavel의 조회 구축기에서 JOIN이 같은 이름의 값을 덮어쓰는 경우
Laavel Eloquent에 빠지지 않기 위해 궁금한 거.
Reference
이 문제에 관하여(Laavel에서 쿼리 생성기의 Join을 사용해서 검색 기능을 만들다가 빠졌어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zackey2/items/33fab31f979a78a6372c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)