【问题标题】:Eloquent ORM many to many relationship best practicesEloquent ORM 多对多关系最佳实践
【发布时间】:2014-03-20 22:34:55
【问题描述】:

我有两张桌子

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

【问题讨论】:

  • 当然,我不介意使用idtitlecar_idpart_idprice 获取对象数组...
  • idpart_id 有何不同?他们不是同一个东西吗?
  • 不,约瑟夫,他们不是。 id 是包含 car_id 和 part_id 的数据透视表的 ID。

标签: php orm laravel eloquent


【解决方案1】:

如果您将price 包含在withPivot 中,pivot 模型上可以使用price

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,
    ];
});

【讨论】:

  • 我没有尝试过,因为我使用了完全不同的方法,但非常感谢!
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2020-05-08
相关资源
最近更新 更多