2016-05-24 6 views
0

2つのテーブルがあり、そのうちの1つが「投稿」で、もう1つが「通知」です。私は、ページとページの投稿と通知のリストをユーザーに表示したい。どのように効率的に行うことができますか? 私はこのコードをうまく動作させていますが、すべてのデータを取得してスライスするので効率的ではありません。 MYSQLを使用してページネーションを行いたいlaravel 2つの別個のテーブルから項目を取得し、ページ区切りと結果をマージする

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

答えて

0

すべてのアイテムをマージして1つのコレクションを作成できます。

$resultCollection = collect($result)

forPageメソッドより。

関連する問題