2014-06-05 2 views
0

Eloquent ORM 또는 Laravel 웹 사이트의 쿼리 작성기로 번역하기를 희망하는 복잡한 요청이 있습니다. 특히 INNER JOIN과 FROMSQL 요청을 Laravel로 번역

의 이중 이름으로 인해이 작업을 수행 할 수 없습니다.

이 내 SQL 요청

SELECT u.name, 
     u.photo, 
     m.* 
FROM users u 
INNER JOIN messages m ON u.id = m.useridsend 
INNER JOIN (
    SELECT useridsend, 
    MAX(created_at) AS created_at 
    FROM messages 
    GROUP BY useridsend 
) r ON m.useridsend = r.useridsend 
AND m.created_at = r.created_at 
WHERE m.useridreceive=2 
ORDER BY m.created_at DESC; 
+0

[원료 식 (http://laravel.com/docs/queries#raw-expressions 같은 것을 사용) 도움이 될 수도 있습니다. –

+0

감사합니다, 그것은 나를 도울 수 있지만 순수 SQL없이이 요청 SQL을 번역 할 수 있는지 알고 싶지만 쿼리 작성기 – Malxiin

+0

을 사용하십시오. 몇 분만 기다려주십시오. Eloquent 형식의 SQL 코드를 사용하여 이에 대한 답변 작성 –

답변

1

여기 Raw Expressions를 사용하여 설득력 구문에 검색어를 만드는 나의 시도이다. 내가 테스트하지 않았으므로 이것이 정확하지 않을 수 있음을 명심하십시오. 그리고 당신이 속기를 사용하면 빌드하기가 어색합니다. 내가 말했듯이

DB::selectRaw("u.name, u.photo, m.* from users u") 
->joinRaw("messages m ON u.id = m.useridsend") 
->joinRaw("(SELECT useridsend, 
      MAX(created_at) AS created_at 
      FROM messages 
      GROUP BY useridsend) 
      r ON m.useridsend = r.useridsend 
      AND m.created_at = r.created_at") 
->whereRaw("m.useridreceive=2") 
->orderBy('m.created_at', 'DESC') 
->get(); 

, 그것은 100 % 정확하지 않을 수 있습니다,하지만 난 당신의 아이디어를 얻을 희망 : 당신은 당신의 코드에서 원시 쿼리를 많이해야하고, 나는 AND 문이 안쪽 위해이었다 가정하면 가입 raw 개의 검색어를 사용하는 방법 테이블에 대해 약식 이름을 적게 사용하면 표준 Eloquent 코드를 더 쉽게 사용할 수 있습니다.

편집

또한

이이 모델을 활용하여 단순화 될 수 있을까? 모든 메시지를 사용자에게 보내려고하는 것 같습니다. 메시지 모델뿐만 아니라 정의 된 사용자 모델, 일부 Eager Loading 기술을 활용할 수 있으며,

User::where('id', '=', '2')->with('messages')->get(); 
+0

"u"와 "m"하지만 "사용자"는 "메시지"를 사용하지 않지만 Laravel은 "정의되지 않은 메서드를 호출합니다. \ Database \ Query \ Builder :: joinRaw() " – Malxiin

+0

한 명의 사용자가 최근에받은 메시지를 검색하려고했습니다. 그리고 많은 연구와 주제 게시, 내가 찾은 유일한 대답과 누가이 요청을 작동합니다. – Malxiin

+0

나는 해결책을 찾는다, 그것은 당신과 조금 다르다. – Malxiin