Как это сделать в Laravel, подзапрос где в
Как я могу сделать этот запрос в Laravel:
SELECT
`p`.`id`,
`p`.`name`,
`p`.`img`,
`p`.`safe_name`,
`p`.`sku`,
`p`.`productstatusid`
FROM `products` p
WHERE `p`.`id` IN (
SELECT
`product_id`
FROM `product_category`
WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1
Я мог бы также сделать это с помощью Join, но мне нужен этот формат для работы.
6 ответов:
рассмотрим этот код:
Products::whereIn('id', function($query){ $query->select('paper_type_id') ->from(with(new ProductCategory)->getTable()) ->whereIn('category_id', ['223', '15']) ->where('active', 1); })->get();
взгляните на расширенную документацию wheres для Fluent:http://laravel.com/docs/queries#advanced-wheres
вот пример того, что вы пытаетесь достичь:
DB::table('users') ->whereIn('id', function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
Это позволит произвести:
select * from users where id in ( select 1 from orders where orders.user_id = users.id )
вы можете использовать переменную с помощью ключевого слова " 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();
следующий код работал для меня:
$result=DB::table('tablename') ->whereIn('columnName',function ($query) { $query->select('columnName2')->from('tableName2') ->Where('columnCondition','=','valueRequired'); }) ->get();