如何使用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();