2016-10-27 2 views
0

두 개의 'travel.request'테이블과 'traveling_details'테이블이 있습니다.id를 기반으로 한 레코드 표시

travel_request table 
id name 
    1 aa 
    2 bb 
traveling_details table 
    id travel_request_id(FK from travel_request) country 
    1  1           UK 
    2  1           CL 
    3  2           Australia 
    4  2           India  

나는 travel_request_id에 대한 travel_request_id 1 레코드를 하나의 레코드를 나열하려면 = 1 travel_request 테이블 내용과 다른

$request = DB::table('travel_request') 
     ->join('department', 'travel_request.department_id', '=', 'department.id') 
     ->join('users', 'travel_request.approver_id', '=', 'users.id') 
     ->join('travel_purpose', 'travel_request.travel_purpose_id', '=', 'travel_purpose.id') 
     ->join('traveling_details', 'travel_request.id','=','traveling_details.travel_request_id') 
     ->join('country','country.id', '=', 'traveling_details.country_id') 
     ->join('travel_request_status','travel_request.status_id', '=', 'travel_request_status.id') 
     ->select('travel_request.*', 'travel_request.id as travel_id','department.name as dept_name','users.firstname as approver_name','travel_purpose.purpose','country.name as country_name','traveling_details.from_date','traveling_details.to_date','travel_request_status.status')->where('travel_request.requestor_id',$user_id)->paginate(2); 

과 함께이 쿼리는 traveling_details 테이블의 모든 레코드를 표시하고 travel_request_id = 2

답변

0

DB 트랜잭션에 ORM을 사용할 수 있습니다. 해당 쿼리에서 LIMIT 1을 사용해보십시오.

0
SELECT * FROM `travel_request` 
join `travel_details` ON `travel_details`.`request_id` = `travel_request`.`request_id` 
    group by `travel_request`.`request_id` 

샘플 DB를 생성하고 동일한 방법으로 처리했습니다. 'ON'조건이 일치 할 때 내부 조인이 테이블의 모든 행을 선택할 것이라는 것을 이해해야합니다. travel_details에서 한 행만 원하면 travel_request.id에 GROUP BY을 사용할 수 있습니다. 그러면 일치하는 조건의 첫 번째 행만 선택됩니다. 희망이 도움이됩니다.

enter image description here enter image description hereenter image description here

관련 문제