如何使用Laravel实现以下目标。
我有一个产品表,与ProductSizes有一个关系 - 产品尺寸包含与产品相关的尺寸。
我正在尝试查询 - 我得到所有产品,其中productSizes的大小为'中等'。
我看过使用'With',但这只是返回一个包含整体产品列表的对象,只有那些尺寸....
我希望实际上只返回ProductSizes表的size列中特别具有'Medium'值的产品。
答案 0 :(得分:0)
$medium_product_ids = ProductSizes::where('size_name', '=', 'medium')->distinct()->get(array('product_id'));
$products = Products::whereIn('product_id',$medium_product_ids)->get();
答案 1 :(得分:0)
也许使用加入:
Product::join('product_sizes', 'product_sizes.id', '=', 'products.product_size_id')
->where('size_name' = 'medium')
->get();
使用''在查询运行后,eager会加载关系,因此您无法限制使用它。
答案 2 :(得分:0)
试试这个,我认为它应该只有中等尺寸的产品:
Products::leftJoin('ProductSizes', 'products.id', '=', 'ProductSizes.product_id')
->groupBy('products.id')
->having(DB::raw('count(*) = 1 and size="Medium"'))
->get();