Laravel查询多个模型并合并结果

时间:2016-05-31 03:58:40

标签: laravel laravel-5.2

在我的应用程序中,我返回一个包含Posts模型中所有记录的视图。我现在有另一个模型,我想返回结果,在同一个视图中,我想结合Post模型和这个新模型的查询结果。合并后,我想通过" created_at"来订购结果。日期。

我一直在尝试在查询构建器上使用Union方法,但我收到错误"使用的SELECT语句具有不同数量的列..."。可能更容易创建一个整体表来保存这些模型的所有结果以及我将来创建的其他模型。

控制器:

$connectionsPosts = Post::where(function($query) {
        return $query->where('user_id', Auth::user()->id)
            ->orWhereIn('user_id', Auth::user()->following()->lists('connection_id'));
    });

$request = DB::table('request')->union($connectionsPosts)->get();

return view('main.discover.connections')
    ->with([
        'connectionsPosts' => $request,
    ]);

更新

查看:

@if ($connectionsPosts->count())
    @foreach ($connectionsPosts as $Posts)
        // Provide markup to loop through results
    @endforeach
@endif

我试图实现这样的目标

@foreach ($allResults as $results)
    // Some markup that includes both connectionsPosts and request based on the "created_at" date
@endforeach

2 个答案:

答案 0 :(得分:2)

使用Laravel Collections。

在您的示例中,您将第一个结果存储在$request中。假设您在$otherRequest中存储了其他一些结果。

首先使用merge方法合并两个结果:

$mergedRequest = $request->merge($otherRequest);

然后使用sortBy方法:

$sorted = $mergedRequest->sortBy('created_at');

答案 1 :(得分:1)

这不是我的事,但为什么你没有这样做:

return view('main.discover.connections')
    ->with([
        'connectionsPosts' => $connectionsPosts,
        'request' => $request,
    ]);

然而试试这个

$connectionsPosts = Post::where(function($query) {
        return $query->where('user_id', Auth::user()->id)
            ->orWhereIn('user_id', Auth::user()->following()->lists('connection_id'));
    })->get();

$request = DB::table('request')->get();

$connectionPostsAndRequests = $request->merge($connectionsPosts);
$connectionPostsAndRequests->sortBy('created_at');

return view('main.discover.connections')
    ->with([
        'connectionsPosts' => $connectionPostsAndRequests,
    ]);

不知道它是否有效