Quan Nguyen
Quan Nguyen

Reputation: 99

How to join table with req->id

public function getTourDetail(Request $req)
{
    //Get link detail
    $tour = Tour::where('id',$req->id)->first();
    //I want to take location.city of the location table 
    $detail = Tour::join('location','tour.id_location','=','location.id')
    ->whereColumn([
        ['tour.id_location','=','location.id']
    ])
    ->get(array(
        'tour.id as id_tour',
        'location.image',
        'tour.name',
        'tour.id_location',
        'location.city'
    ));
    return view('page.tour-detail',compact('tour','detail'));
}

I would like to be able to combine two query statements to get information from the location table ($ detail) like the id of the link request ($ tour).

Upvotes: 1

Views: 40

Answers (2)

Sark
Sark

Reputation: 299

First thing, if you are using model then using eloquent relationship will be a better idea to deal with the situation like yours. But if you want to join your table then this will be the way:

public function getTourDetail($id)
{
    $tour = Tour::where('id',$id)->first();
    //I want to take location.city of the location table 
    $detail = DB::table('location')
                        ->join('tour','tour.id_location','=','location.id')
                        ->select(
                            'tour.id as id_tour',
                            'location.image',
                            'tour.name',
                            'tour.id_location',
                            'location.city'
                        )->get();
    return view('page.tour-detail',compact('tour','detail'));
}

Note: if you are getting id from submitted form then replace first portion of the code with:-

public function getTourDetail(Request $request)
    {
        $tour = Tour::where('id',$request->id)->first();

Upvotes: 0

Alexey Mezenin
Alexey Mezenin

Reputation: 163818

Since you use models, you can use Eloquent relationships to load related data. First, define a relationship in the Tour model:

public function location()
{
    return $this->belongsTo(Location::class, 'id_location')
}

Then load Tour and get related location:

$tour = Tour::find($req->id);
$relatedLocation = $tour->location;

Upvotes: 1

Related Questions