Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否应该在laravel中使用EAV模型?_Php_Mysql_Laravel_Database Design_Entity Attribute Value - Fatal编程技术网

Php 我是否应该在laravel中使用EAV模型?

Php 我是否应该在laravel中使用EAV模型?,php,mysql,laravel,database-design,entity-attribute-value,Php,Mysql,Laravel,Database Design,Entity Attribute Value,我正在构建一个应用程序,我的应用程序中有大约20个类别,每个类别都有一些自定义字段。因此,用户选择一个类别并填写自定义字段。之后,我需要将这些值存储在DB中。你能建议什么是最好的方法吗。我还需要能够在这个自定义字段上进行筛选-就像高级筛选一样,性能也是关键 在这种情况下,我是否应该为每个类别创建一个单独的带有自定义字段的表 谢谢你的帮助 丹妮我可以想到两个选择 1) 在类别表中创建一个名为类似属性的JSON字段。然后基本上在其中存储一个键值数组。但在查询属性时,这将带来一些挑战。我知道有很多办法

我正在构建一个应用程序,我的应用程序中有大约20个类别,每个类别都有一些自定义字段。因此,用户选择一个类别并填写自定义字段。之后,我需要将这些值存储在DB中。你能建议什么是最好的方法吗。我还需要能够在这个自定义字段上进行筛选-就像高级筛选一样,性能也是关键

在这种情况下,我是否应该为每个类别创建一个单独的带有自定义字段的表

谢谢你的帮助


丹妮

我可以想到两个选择

1) 在类别表中创建一个名为类似属性的JSON字段。然后基本上在其中存储一个键值数组。但在查询属性时,这将带来一些挑战。我知道有很多办法,但我从来都不需要它,所以我不知道

2) 在数据库中创建一个类别属性表,如下所示

cat_id - int
key - varchar
value - varchar
Composite Index Unique on [cat_id, key,value ]
然后在laravel中创建一个类别属性模型,并定义一个hasmany关系,其中类别具有多个类别属性

然后查询您的类别将类似这样

cat_id - int
key - varchar
value - varchar
Composite Index Unique on [cat_id, key,value ]
$categories=Category::whereHas('CategoryAttributes',函数($query){
$query->where('key','=','color');
$query->where('value','=','blue');

})->get()

在关系数据库中实现实体属性值(Entity Attribute Value,EAV)模型的优点和缺点与Laravel相同,与几乎所有其他框架或语言相同。我不认为使用Laravel与这个问题有任何关系

如果您的用例需要EAV的灵活性,并且您已经准备好应对额外的复杂性(一个数量级),并准备好应对巨大的性能冲击。。。如果这些不是断路器,则使用EAV模型


但是,如果您不需要EAV的任何好处,那么请务必避免其缺点。

我将仅粗略地回答最后一个问题,因为其余问题过于宽泛和不具体。category应该是一个表,category_custom_字段应该是另一个表,custom fields表存储一个category ID将它们链接在一起。在数据库模型设计完成后,就其他问题提问。谢谢@JohnJoseph的回答,您会将自定义字段的选定值存储在3个表自定义字段值中的何处?