laravel从两个单独的表中获取项目并将结果与​​分页合并

时间:2016-05-24 07:12:24

标签: laravel laravel-5 pagination

我有两张桌子,其中一张是“帖子”,另一张是“通知”。我想向用户显示分页的帖子和通知列表。我怎么能有效地做到这一点? 我有这个代码工作正常,但它没有效率,因为我得到所有数据,然后切片。我想使用MYSQL进行分页

public function list_post_notification(Request $request , $page_number = 1 , $per_page=10 , $brand_id = null ){
        $brand =$this->brandRepository->getMagazinBrand() ;
        $posts = $brand->posts()->orderBy('posts.created_at' , 'desc')->take($page_number * $per_page) ;
        $notifs = $brand->notifications()->orderBy('notifications.created_at' , 'desc')->take($page_number * $per_page) ;
        $result = [] ;
        foreach ($posts->get() as $k=>$v){
            $item = [
                'type'=>'post' ,
                'uuid'=>$v->uuid,
                'title'=>$v->title,
                'created_at'=>strtotime($v->created_at),
                'creator'=>$v->brand->fa_name,
                'brand_id'=>$v->brand->id,
            ];
            $result[$item['created_at']] =$item ;
        }
        foreach ($notifs->get() as $k=>$v){
            $item = [
                'type'=>'notification' ,
                'uuid'=>$v->uuid,
                'title'=>$v->title,
                'created_at'=>strtotime($v->created_at),
                'creator'=>$v->brand->fa_name,
                'brand_id'=>$v->brand->id,
            ];
            $result[$item['created_at']] =$item ;
        }
        krsort($result) ;
        $start = 0 ;
        if ($page_number > 1)
            $start = ($page_number -1 ) * $per_page ;
        return response()
            ->json(array_slice($result , $start  , $per_page)) ;
}

1 个答案:

答案 0 :(得分:0)

您可以合并所有商品并创建一个收藏品。

$resultCollection = collect($result)

使用forPage方法。