piotr.jowisz
piotr.jowisz

Reputation: 3

Laravel - joining 3 tables

I have 3 tables: users, visits, bloodtests

The Tables look like this:

users: id

visits: id, user_id

bloodtests: id, visit_id

What I need to get is "SELECT * FROM bloodtests" for the current user

I tried this way:

$item = User::findOrFail($id);   //get ID of current user

$bt = DB::table('bloodtests')
    ->join('visits', 'bloodtests.visit_id', '=' ,'visits.id')
    ->join('users', 'visits.user_id', '=' ,'users.id')
    ->select(
        'bloodtests.id',  
        'bloodtests.visit_id')
    ->where('users.id', $item)
    ->get();

But it doesnt work.

Any help is appreciated :)

Upvotes: 0

Views: 70

Answers (3)

Khine Thu
Khine Thu

Reputation: 137

$item = User::findOrFail($id);   //get ID of current user

$bt = DB::table('bloodtests')
    ->join('visits', 'bloodtests.visit_id', '=' ,'visits.id')
    ->join('users', 'visits.user_id', '=' ,'users.id')
    ->select(
        'bloodtests.id',  
        'bloodtests.visit_id')
    ->where('users.id', $id)
    ->get();

Upvotes: 0

Eduardo Díaz
Eduardo Díaz

Reputation: 138

Try this:

$item = User::findOrFail($id);

$bt = DB::table('bloodtests')
    ->join('visits', 'bloodtests.visit_id', '=' ,'visits.id')
    ->join('users', 'visits.user_id', '=' ,'users.id')
    ->select(
        'bloodtests.id',  
        'bloodtests.visit_id')
    ->where('users.id', $item->id)
    ->get();

Upvotes: 0

Niklesh Raut
Niklesh Raut

Reputation: 34924

You are getting all users data as collection with this

 $item = User::findOrFail($id);

You just need to provide current user's id by \Auth::id() or direct using $id instead $item

$bt = DB::table('bloodtests')
    ->join('visits', 'bloodtests.visit_id', '=' ,'visits.id')
    ->join('users', 'visits.user_id', '=' ,'users.id')
    ->select(
        'bloodtests.id',  
        'bloodtests.visit_id')
    ->where('users.id', \Auth::id())
    ->get();

or direct using $id

->where('users.id', $id)

Upvotes: 2

Related Questions