How to do this in Laravel, subquery where in
Have a look at the advanced where clause documentation for Fluent. Here's an example of what you're trying to achieve:
DB::table('users') ->whereIn('id', function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
This will produce:
select * from users where id in ( select 1 from orders where orders.user_id = users.id)
You can use variable by using keyword "use ($category_id)"
$category_id = array('223','15');Products::whereIn('id', function($query) use ($category_id){ $query->select('paper_type_id') ->from(with(new ProductCategory)->getTable()) ->whereIn('category_id', $category_id ) ->where('active', 1);})->get();