Laravel - ManyToMany关系中的其他信息

时间:2015-03-30 20:34:48

标签: laravel eloquent

我有三张桌子喜欢这个:

Car
 -id
 -name
 -production_start
 -etc

Option
 -id
 -name
 -price

Options_Cars
 -id_option
 -id_car
 -in_basic

使用这样的代码:

class Cars extends Eloquent {     
    public function options()
    {
        return $this->belongsToMany('Options','options_cars','id_car','id_option');
    }
}

如何检索视图中每个选项的in_basic字段?

2 个答案:

答案 0 :(得分:1)

我可能会扩展您的架构并添加另一个表来区分汽车的基本模型和添加了额外的模型,但仍然将所有选项保留为构建块。例如......

Car
  -id
  -name
  -production_start
  -etc
Option
  -id
  -name
  -price
  -etc
Cars_BasicOptions
  -car_id
  -option_id
Cars_ExtraOptions
  -car_id
  -option_id

但是上面的内容也给我带来了一个新问题 - 因为Option有价格标签,它不再是通用的。考虑金属喷漆作为一种选择 - 菲亚特Punto的价格与梅赛德斯SLS-AMG的价格相同吗?我对此表示怀疑......因此,您认为选择可能不适合那种通用。根据您的业务逻辑,执行以下操作可能更为合适:

Car
  -id
  -name
  -production_start
  -etc
Option
  -id
  -car_id
  -name
  -price
  -in_basic
  -etc

当然,如果您想单独处理选项,可以将其移到另一个表中,例如......

Car
  -id
  -name
  -production_start
  -etc
Option
  -id
  -name
Car_Option
  -car_id
  -option_id
  -price
  -in_basic
  -etc

这可能更接近你原来的想法。帮助

答案 1 :(得分:1)

http://laravel.com/docs/5.0/eloquent#working-with-pivot-tables

return $this->belongsToMany('App\Role')->withPivot('foo', 'bar');

$model->pivot->foo$model->pivot->bar可供您使用。

这适用于L4和L5。