php - otra - Cómo hacer esto en Laravel, subconsulta en donde
consulta dentro de otra consulta laravel (6)
¿Cómo puedo hacer esta consulta en 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
También podría hacer esto con una unión, pero necesito este formato para el rendimiento.
Considera este código:
Products::whereIn(''id'', function($query){
$query->select(''paper_type_id'')
->from(with(new ProductCategory)->getTable())
->whereIn(''category_id'', [''223'', ''15''])
->where(''active'', 1);
})->get();
Eche un vistazo a la documentación avanzada de wheres para Fluent: http://laravel.com/docs/queries#advanced-wheres
Aquí hay un ejemplo de lo que estás tratando de lograr:
DB::table(''users'')
->whereIn(''id'', function($query)
{
$query->select(DB::raw(1))
->from(''orders'')
->whereRaw(''orders.user_id = users.id'');
})
->get();
Esto producirá:
select * from users where id in (
select 1 from orders where orders.user_id = users.id
)
El siguiente código funcionó para mí:
$result=DB::table(''tablename'')
->whereIn(''columnName'',function ($query) {
$query->select(''columnName2'')->from(''tableName2'')
->Where(''columnCondition'',''='',''valueRequired'');
})
->get();
Laravel 4.2 y versiones posteriores, pueden usar la consulta de relación de prueba: -
Products::whereHas(''product_category'', function($query) {
$query->whereIn(''category_id'', [''223'', ''15'']);
});
public function product_category() {
return $this->hasMany(''product_category'', ''product_id'');
}
Puedes usar la variable usando la palabra clave "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();
Product::from(''products as p'')
->join(''product_category as pc'',''p.id'',''='',''pc.product_id'')
->select(''p.*'')
->where(''p.active'',1)
->whereIn(''pc.category_id'', [''223'', ''15''])
->get();