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

时间:2014-03-20 22:34:55

标签: php orm laravel eloquent

我有2张桌子

cars (id, title)

parts (id, title)

我希望为每辆车配备很多部件以及特定车型的这部分价格......

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

car_parts(id, car_id, part_id, price)

如何在Laravel的Eloquent中定义这样的关系?

我想做

$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

1 个答案:

答案 0 :(得分:1)

如果price模型中包含pivot,则withPivot可以使用public function parts () { return $this->belongsToMany('Part', 'car_parts', 'car_id', 'part_id') ->withPivot('price'); }

map

然后您可以parts覆盖$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, ]; }); 集合以获取所需的数组:

{{1}}