mardi 24 mai 2016

laravel get items from two separate table and merge the result with pagination

I have two tables, one of them is "posts" and the other one is "notifications". I want to show the users a list of posts and notifications with pagination. how can I do that efficiently? I have this code that works fine but it is not efficient.

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)) ;
}



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/1WeGkHG
via IFTTT

Aucun commentaire:

Enregistrer un commentaire