【发布时间】:2021-06-19 09:28:31
【问题描述】:
我构建了简单的 SPA。 我在后端使用 laravel,在前端使用带有 vuex 的 Vuex 和路由器。 假设我有端点:
/users/1/conversations/1
我已经定义了用户和对话之间的关系。 控制器方法是这样的:
User::findOrFail(id)->conversations()->with('user')->get();
它给出了示例输出:
[{
id: 1,
title: 'lorem ipsum'
users: [{id: 1, name:'John'}, {id: 2, name: 'Bob'}]
},
id: 2,
title: 'lorem ipsum'
users: [{id: 1, name:'John'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Ann'}]
}]
并且重复参与许多对话的用户的数据。在上面的例子中是:
{id: 1, name:'John'}
我认为数据重复不是一个好主意。
也许我应该这样做:
- 修改控制器方法以产生此输出:
{
conversations: [{
id: 1,
title: 'lorem ipsum'
users: [1,2]
},
id: 2,
title: 'lorem ipsum'
users: [1,2,3]
}],
unique_user_ids: [1,2,3]
}
- 然后在我的前端调用两个不同的 axios.get:一次用于对话 (/users/{id}/sessions),n 次用于每个用户 (/user/{id})。
有什么意义吗?
【问题讨论】:
-
那么,您想将
users数据缩短为仅 id 吗? -
是的。我知道如何缩短它。问题是:我应该这样做吗?我不知道在我只发送 id 以获取它们而没有重复或只是获取重复数据并且不要 axios /user/{id} n 次之后调用 axios n 次更好
-
或者我应该编辑我的后端代码以通过一次执行它并产生此响应:{对话:[{ id:1,标题:'lorem ipsum'用户:[1,2]},id : 2, title: 'lorem ipsum' users: [1,2,3] }], unique_users:[ { id: 1, name: ..., }, { id: 2, name: ... }, { id:3,名称:... }] }
-
我现在明白了……答案是:视情况而定。做 40 个 axios 调用没什么大不了的(你不应该一次做 40 个,但如果你必须这样做也没问题),你应该避免做的是在你可以做 2 次并且可能处理的时候打 DB 40 次你想要的数据......所以你必须牢记这一点,如果你正在使用
with进行查询,那应该是2个查询,所以这是最好的事情(正如你所分享的那样)。
标签: javascript php laravel vue.js vuex