根据关系水平的条件检索结果


Retrieve results based on condition of relation laravel

如何使用Laravel实现以下目标。

我有一个表Products,它与ProductSizes有一个oneToMany关系——product sizes保存与产品相关的尺寸。

我正在尝试做一个查询,我得到所有的产品,其中productSizes有一个大小说'Medium'。

我想使用'With',但这只是返回一个包含整个产品列表的对象,只有这些尺寸....

我实际上只想带回那些在ProductSizes表的size列中只有'Medium'值的产品。

$medium_product_ids = ProductSizes::where('size_name', '=', 'medium')->distinct()->get(array('product_id'));
$products = Products::whereIn('product_id',$medium_product_ids)->get();

可以使用join:

Product::join('product_sizes', 'product_sizes.id', '=', 'products.product_size_id')
    ->where('size_name' = 'medium')
    ->get();

使用'with' eager在查询运行后加载关系,因此您不能约束使用它

试试这个,我认为它应该得到只有中等大小的产品:

Products::leftJoin('ProductSizes', 'products.id', '=', 'ProductSizes.product_id')
    ->groupBy('products.id')
    ->having(DB::raw('count(*) = 1 and size="Medium"'))
    ->get();