根据关系laravel的条件检索结果

时间:2014-06-03 16:27:11

标签: php laravel

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

我有一个产品表,与ProductSizes有一个关系 - 产品尺寸包含与产品相关的尺寸。

我正在尝试查询 - 我得到所有产品,其中productSizes的大小为'中等'。

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

我希望实际上只返回ProductSizes表的size列中特别具有'Medium'值的产品。

3 个答案:

答案 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();