Php 通过两种关系获得结果Laravel
我有3种型号,比如产品、单位和面积 产品和单位之间有一种关系。一个单位可能有很多产品 产品和区域之间还有另一种关系。一个地区也可能有很多产品 这里的要点是:给定一个区域,使用 各自的单位 获取给定区域的所有产品很容易:Php 通过两种关系获得结果Laravel,php,laravel,model,eloquent,relationship,Php,Laravel,Model,Eloquent,Relationship,我有3种型号,比如产品、单位和面积 产品和单位之间有一种关系。一个单位可能有很多产品 产品和区域之间还有另一种关系。一个地区也可能有很多产品 这里的要点是:给定一个区域,使用 各自的单位 获取给定区域的所有产品很容易:$Area->products(),但我想使用('unit')执行$Area->products-> 有办法吗?或者,我必须通过products数组对每个单元执行foreach,并查询它们?您使用使用点符号定义的嵌套关系 $areas = Area::with('products.
$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
循环。它正在工作!但是我想把一个放在与产品模型相关的条件下,我就是做不到。我已经修改了答案,希望它能有所帮助