hello
,对不起我的英语。我会尝试解释我的问题。
例如,我们有模型Product
。
每种产品都有一些选择:
product_1 : option_1 = 50, option_2 = 14, option_3 = 23
什么是正确的方法?
首先 - 创建数据库,如
id | title | option_1 | option_2 | option_3
第二 - 创建模型和表格,例如
ProductModel hasMany optionModel
OptionModel belongsToMany ProductModel
tables in databases: Product, Option, Product_Option_Relationships
第三 - 在函数和表Product_Option_Relationships
中创建一些集合,如
$options = collect([
['id' => '1', 'name' =>'option1'],
['id' => '2', 'name' =>'option2'],
]);
表:id | product_id | option_id
或者也许存在正常的方式,因为首先 - 它太大的表,当你有20个选项,第二个 - 仅为信息功能创建新模型,我现在不,它正常吗?第三 - 在视图中显示选项名称太难了。
谢谢,我希望你能理解我。
答案 0 :(得分:1)
通常使用一对多,多对多关系
这样做的好处是,您可以自由编辑任何记录而无需修改整个列以将其应用于您的表格:
首先,我们有products
表,这将需要foreach选项
因此,我们应该将表格options
放在一起,然后我们会添加一个新表格assignOptionsToProducts
,其中包含options
和& products
在这种情况下,您可以根据自己的喜好设置多对多或一对多的关系
Products Table
id | Name
1 | Product A
2 | Product B
Options Table
id | Name
1 | Option A
2 | Option B
AssignOptionsToProducts Table
id | Product_id | Option_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
如您所见,我们多次分配了相同的选项 当我们想要修改任何选项时你可以不修改其他表中的每个记录,当然你可以轻松地多次使用每个表
答案 1 :(得分:0)
使用第二种方式。你不会有重复的选择。例如:
产品
id | name
---|------
1 | Car
2 | Bike
选项
id | name
-----|------------
1 | Transport
option_product
option_id | product_id
------------|-------------
1 | 1
1 | 2
使用其他方式,您可以选择传输两次。
答案 2 :(得分:0)
您可以使用多对多关系,并且可以像这样构建它:
产品型号
class Product extends Model {
...
public function options() {
return $this->belongsToMany('App\Product', 'product_options', 'product_id', 'option_id');
}
}
选项模型
class Option extends Model {
...
public function product() {
return $this->belongsToMany('App\Option', 'product_options', 'option_id', 'product_id');
}
}
您需要三个表才能实现此目的:
Table products
id | name
-----------------
1 | iBeacon
2 | Intel Edison
Table options
id | name
----------
1 | Price
2 | Size
Table product_options
id | option_id | product_id
---------------------------
1 | 1 | 2
2 | 2 | 2
您可以选择是否要在选项表或数据透视表中存储带有选项值的记录。我将它们放在数据透视表中以使选项表更小。
现在,您可以为您的产品分配选项,如下所示:
...
// Assing options to a product
$product->options()->sync([$optionID, $optionID]);
// Get product's options
$product->options;
// Get products having certain option
$option->products;
...