**Hello!**我正在使用Laravel和VueJS开发一个mono-repo,它对包含外键的表进行CRUD操作。
我发现很难为我的JSON提出一个模式或结构。我已经查阅了不同的资源,但没有太多的运气。
**这里有一个例子,希望能传达我的问题:**例如,表users
有列language_id
,它将其绑定到languages
表。
假设用户正在填写多个表单,其中一个表单中他们从带有语言ID的表单中选择自己的语言。
由于我的User
模型具有语言关系和$fillable
属性language_id
,所以似乎我总是需要PUT/POST API负载来匹配模型/表,如下所示:
// POST/PUT payload
{
language_id: 3, // foreign key column
first_name: 'Fred', // string column
}
字符串
但是,对于前端的其他目的,我想知道该用户资源的语言名称。所以我的另一个选择是让我的UserResource
和StoreUserRequest
文件如下所示:
// UserResource/StoreUserRequest/JSON format
{
language: {
id: 3, // $this->language_id
name: 'English', // $this->language->name
},
first_name: 'Fred',
}
型
如果我采用这种方法,似乎我需要在POST或PUT中将数据传递回后端之前修改数据的结构。
另一种选择是向UserResource
文件添加新字段,其中包含我需要的信息。
{
language_id: 3, // $this->language_id
language: 'English', // $this->language->name
first_name: 'Fred', // $this->first_name
}
型
但我不确定这是否是一个好的方法。我正在做一个我认为是中等规模的项目(100多张table),并希望听到大家的想法!谢谢!
我试着用搜索引擎来寻找答案,但我得到的最好的答案是“这取决于”。我不知道如何更好地描述我的问题。
1条答案
按热度按时间c86crjj01#
您的最佳实践是用途:
字符串
当你熟悉Laravel的关系时,你会发现它是多么容易。不考虑Laravel,而只是在JSON API中,当处理链接在一起的不同对象时(这里是一个用户和一个语言)你不应该在同一个级别上混合它们的参数。我给予另一个更深入的例子。Fred现在有一个父亲:Peter和Peter讲的语言与Fred相同(但显然可以不同)。Peter的完整JSON应该是:
型
这样做的目的是隔离每个对象,以保持代码的干净,并更容易重用它。
另一方面,如果你正在开发一个非常具体的用例,它不会进化,甚至以后也不会被其他用例使用,你可以使用一种不那么干净的方法,将每个元素分派到同一个级别上。但是请记住,大多数时候,进化的东西都是作为不会进化的东西开发的(可悲的是......)。实际上,你可以但不应该这样做。