所以我试图通过实施雄辩的关系来改进我的查询。 假设我有一个线程表,每个帖子都有回复
我需要的是一个包含所有回复数组的线程信息的JSON对象。
目前,我可以实现我想要的目标。
public function show($threadId){
$threads = ThreadView::find($threadId);
$threads->replies = ReplyView::where('threadId', $threadId)->get();
return response()->json($threads, 200);
}
凭借雄辩的关系,我可以通过这样的方式获得相同的结果。
public function show($threadId) {
$threads= ThreadView::find($threadId);
$threads->replies= ThreadView::find($threadId)->Replies;
return response()->json($threads, 200);
}
使用关系是否有优势?它们对我来说都是一样的。
答案 0 :(得分:2)
使用Eloquent你可以做得更短:
public function show($threadId) {
$threads = ThreadView::with('replies')->find($threadId);
return response()->json($threads, 200);
}
with
函数将急切加载关系,而无需编写查询。
这是Eloquent的优势,它会为您编写查询。无需为您创建连接查询或额外查询。
答案 1 :(得分:0)
public function show($threadId) {
$threads= ThreadView::with('replies')->find($threadId);
return response()->json($threads, 200);
}
主要优点是使用这样的关系,第一个示例执行2次选择(它抓取100%ThreadView
然后100%ReplyView
),而第二个示例只执行1次查询。
第二个优点是,与其他人相比,Eloquent在延迟加载时做了一个非常好的工作,如果你不是SQL查询的专家,那么使用它会好得多。
放弃Eloquent模型并直接使用DB Builder将大约快500倍,我发现代码更清晰。这可能就是你要找的东西。
但是如果您使用模型,请使用关系!