使用Laravel Eloquent Relationship查询有什么好处?

时间:2018-01-19 16:08:41

标签: php database laravel eloquent

所以我试图通过实施雄辩的关系来改进我的查询。 假设我有一个线程表,每个帖子都有回复

我需要的是一个包含所有回复数组的线程信息的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);
}

使用关系是否有优势?它们对我来说都是一样的。

2 个答案:

答案 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倍,我发现代码更清晰。这可能就是你要找的东西。

但是如果您使用模型,请使用关系!