2015-03-30 121 views
0

我有三个表的其他信息喜欢这样的:Laravel - 在多对多关系

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领域视图内的每个选项?

+0

'in_basic'专栏的目的是什么 - 我不认为它应该属于它现在的位置,这可能是首先要问的正确问题。 – 2015-03-30 21:06:43

+0

@Barnabas表示一个选项是否包含在汽车 – Robus 2015-03-30 21:12:10

+0

的基本包装中,这可能意味着它是否基本,这不是一个选项了?我明白了它将要去哪里......我现在会提交一个答案,给你一个不同方法的想法。 – 2015-03-30 21:17:41

回答

1

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

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

但这也上方把我带到了一个新的问题 - 作为选项都有价格标签,它不再是通用的。考虑将金属涂装作为一种选择 - 对于菲亚特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 

这可能更接近您最初的想法。帮助?