我正在制作电子商务网络应用程序。以下是我计划的事情。
products
表只包含几列。 id
,name
,code
,SKU_no
。meta_information_products
包含列的表格。 id
,product_id
[[{1}}表格的外键],products
,meta_title
,meta_keywords
。meta_description
包含列的表格。 measurement_product
,id
,product_id
,width
,height
,weight
所以我的问题是:
length
然后与Model
和One-To-One
建立products
关系
相关表?或者我应该只创建一个名为Product
的模型,并在一个表product
中声明所有字段。Product
创建了不同的模型,那么为了创建One-To-One
关系而声明的方法的名称应该是什么,与Product
模型相同。例如,请考虑以下内容:我创建了两个名为Product
和MetaInformationProduct
的模型,并且我已经创建了与这两个表的关系。现在我如何name
以下方法:
class Product extends Model {
...
public function methodName() {
$this->belongsTo('App\Product');
}
...
}
对于MetaInformationProduct
:
class MetaInformationProduct extends Model {
...
public function methodName() {
$this->hasOne('App\Product');
}
...
}
答案 0 :(得分:2)
我认为Stack Overflow不是提出此类问题的最佳地点,因为您的问题不一定有正确或错误的答案。有多种可能的方法来构建应用程序的数据结构,最终归结为一个人的个人编码风格。因此,几乎每个开发人员都会对您的问题有一个原创的“正确答案”。
这就是我的想法。为什么这些数据需要三个单独的表?据我所知,所有三个表都包含与单个产品一对一的数据。这意味着更复杂的模型和开发关系,更多的资源和更长的生产执行时间。如果您使用以下列创建一个products
表,则可以避免所有这些:id
,code
,SKU_no
,name
,title
, description
,width
,height
,length
,weight
。这将显着简化您的模型并减少三分之一的查询数量。
另外,我认为我可以在你的表结构中发现一些不好的做法。在当前的meta_information_products
表中,您有一个名为meta_keywords
的列。我猜这个字段会包含产品的多个关键字。这否定了关系数据库结构的好处,并会让你头疼。相反,我会按照上一段中的描述创建一个products
表,然后创建另一个标题为keywords
的表,其中包含以下列:id
,keyword
。最后,您需要一个标题为keyword_product
的关系表,其中包含以下列:id
,keyword_id
,product_id
。这使您可以让一个产品拥有多个关键字,并将一个关键字分配给多个产品。这是一个众所周知的“多对多”关系,您可以在Laravel's official documentation中阅读更多相关信息。
通常,您应该为一个数据库表创建一个模型,但关系表除外。因此,如果您按照我的意愿行事,则需要两个模型:Product
和Keyword
。对于其内容,最好参考前一段中的链接。