Php 雄辩的ORM多对多关系最佳实践

Php 雄辩的ORM多对多关系最佳实践,php,orm,laravel,eloquent,Php,Orm,Laravel,Eloquent,我有两张桌子 汽车(身份证、头衔) 零件(id、标题) 我想把每一辆车都和很多零件联系起来,并为每一辆车的零件定价 我认为最好的方法是通过表格将它们关联起来: car\u零件(id,car\u id,part\u id,price) 我如何在拉雷维尔的《雄辩》中定义这种关系 我想做什么 $car = Car::find(1); $parts = $car->parts; 我想得到一个像这样的对象数组 { 'id' => 1, 'title' => 'rear fl

我有两张桌子

汽车(身份证、头衔)

零件(id、标题)

我想把每一辆车都和很多零件联系起来,并为每一辆车的零件定价

我认为最好的方法是通过表格将它们关联起来:

car\u零件(id,car\u id,part\u id,price)

我如何在拉雷维尔的《雄辩》中定义这种关系

我想做什么

$car = Car::find(1);
$parts = $car->parts;
我想得到一个像这样的对象数组

{
   'id' => 1,
   'title' => 'rear flash',
   'price' => '10.00',
},{
   ...
}
如果我尝试

public function parts(){
    return $this->belongsToMany('Part', 'car_parts', 'car_id', 'part_id');
}
我不知道价格


TIA

如果您将
价格
包含在
withPivot
中,则该
价格
可在
pivot
型号上获得:

public function parts ()
{
    return $this->belongsToMany('Part', 'car_parts', 'car_id', 'part_id')
                ->withPivot('price');
}
然后,您可以在
零件
集合上映射
,以获得所需的阵列:

$parts = Car::find(1)->parts->map(function ($part)
{
    return [
        'id'      => $part->id,
        'title'   => $part->title,
        'car_id'  => $part->pivot->car_id,
        'part_id' => $part->pivot->part_id,
        'price'   => $part->pivot->price,
    ];
});

当然,我不介意得到一个具有
id
title
car\u id
part\u id
price
的对象数组。
id
part\u id
有何不同?他们不是都一样吗?不,约瑟夫,他们不是。id是包含汽车id和零件id的透视表的id。我没有尝试,因为我使用了完全不同的方法,但非常感谢!