Reputation: 3
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
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
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
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