Php 基于关系laravel条件检索结果

Php 基于关系laravel条件检索结果,php,laravel,Php,Laravel,如何使用Laravel实现以下目标 我有一个表Products,它与ProductSize有一个单一的关系——ProductSize保存与产品相关的大小 我试图做一个查询,我得到所有的产品,其中productSizes的大小是“中等” 我考虑过使用“With”,但这只是返回一个包含整个产品列表的对象,只包含那些大小 实际上,我只想带回在ProductSizes表的size列中仅具有“Medium”值的产品。或许可以使用联接: $medium_product_ids = ProductSizes:

如何使用Laravel实现以下目标

我有一个表Products,它与ProductSize有一个单一的关系——ProductSize保存与产品相关的大小

我试图做一个查询,我得到所有的产品,其中productSizes的大小是“中等”

我考虑过使用“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();
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();
也许能回答你的问题。从productSizes表中获取唯一的产品ID,其中大小为中等,然后使用该ID查询结果集中ID所在的products表。