Laravel - 同时联合 + 分页?

2022-08-30 18:29:11

短:

我正在尝试合并2个表,然后添加到查询中。recipesposts->paginate(5)

但是由于某种原因,我得到这个错误:

基数冲突:1222 使用的 SELECT 语句具有不同数量的列 (SQL: (选择 count(*) 作为聚合posts

法典:

$recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at")
                    ->where("user_id", "=", $id);

$items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at")
                ->where("user_id", "=", $id)
                ->union($recipes)
                ->paginate(5)->get();

我做错了什么吗?

没有查询工作正常。->paginate(5)


答案 1

你是对的,分页会导致问题。现在,您可以创建一个视图并查询该视图而不是实际的表,或者手动创建:Paginator

$page = Input::get('page', 1);
$paginate = 5;

$recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at")
            ->where("user_id", "=", $id);
$items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at")
            ->where("user_id", "=", $id)
            ->union($recipes)
            ->get();

$slice = array_slice($items->toArray(), $paginate * ($page - 1), $paginate);
$result = Paginator::make($slice, count($items), $paginate);

return View::make('yourView',compact('result'));

答案 2

我已经面临过这样的问题。我发现一个线程也不是关于,而是关于.paginationunions

请参阅此链接:使用Laravel 4.1对UNION查询进行排序

@Mohamed Azher分享了一个很好的技巧,它适用于我的问题。

$query = $query1->union($query2);
$querySql = $query->toSql();
$query = DB::table(DB::raw("($querySql order by foo desc) as a"))->mergeBindings($query);

这将创建一个如下所示的 sql:

select * from (
  (select a as foo from foo)
  union
  (select b as foo from bar)
) as a order by foo desc;

而且您已经可以像往常一样使用Laravel的。(但你必须分叉一下以适应你的问题)paginate$query->paginate(5)


推荐