Php 通过两种关系获得结果Laravel

Php 通过两种关系获得结果Laravel,php,laravel,model,eloquent,relationship,Php,Laravel,Model,Eloquent,Relationship,我有3种型号,比如产品、单位和面积 产品和单位之间有一种关系。一个单位可能有很多产品 产品和区域之间还有另一种关系。一个地区也可能有很多产品 这里的要点是:给定一个区域,使用 各自的单位 获取给定区域的所有产品很容易:$Area->products(),但我想使用('unit')执行$Area->products-> 有办法吗?或者,我必须通过products数组对每个单元执行foreach,并查询它们?您使用使用点符号定义的嵌套关系 $areas = Area::with('products.

我有3种型号,比如产品、单位和面积

产品和单位之间有一种关系。一个单位可能有很多产品

产品和区域之间还有另一种关系。一个地区也可能有很多产品

这里的要点是:给定一个区域,使用 各自的单位

获取给定区域的所有产品很容易:
$Area->products()
,但我想使用('unit')执行
$Area->products->


有办法吗?或者,我必须通过products数组对每个单元执行
foreach
,并查询它们?

您使用使用点符号定义的嵌套关系

$areas = Area::with('products.unit')->get();
这将使用面积加载产品和产品->单元

然后您可以使用嵌套循环遍历它们

foreach($areas as $area) {
    foreach($area->products as $product) {

        // If units are returning many
        foreach($product->unit as $unit) {

        }

        // Or if there is only one unit per product
        $unit = $product->unit;
    }
}
编辑:添加where子句 如果需要在产品中添加
,其中
,则需要分隔点符号,以便查询
产品
产品.单位

$area = Area::with(['products' => function($q) {
    $q->where('product_field', '=', 'something');
},'products.unit'])->find($area_id);
您还应该查看文档,其中的解释比我可能更清楚


这是一个很好的方法!但我只在一个地方做!这就是为什么我有变量
$area
而不是
..->get()
,你要做
..->查找($area\u id)
,然后你只需删除非常外部的
foreach
循环。它正在工作!但是我想把一个
放在与产品模型相关的
条件下,我就是做不到。我已经修改了答案,希望它能有所帮助