2016-10-27 5 views
0

私は2つのテーブル 'travel.request'テーブルと 'traveling_details'テーブルを持っています。idに基づいて1つのレコードを表示

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レコードをリストする= 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から1つの行だけが必要な場合は、travel_request.idにGROUP BYを使用できます。これは、一致条件の最初の行のみを選択します。お役に立てれば。

enter image description here enter image description hereenter image description here

関連する問題