2014-07-06 3 views
1

두 개의 다른 컬렉션으로 페이징해야합니다. 우선 순위 목록을 작성하십시오. 우선 순위 목록에있는 돈.Laravel 병합 자 2로 컬렉션

왜 단일 쿼리를 수행하지 않으시겠습니까? 우선 순위 목록을 말할 수 있습니다. 필터링을 사용하는 이유; 도시, 카운티, 카테고리를 선택합니다. 그러나 사이트 소유자는 도시, 카운티 또는 원하는 카테고리에 나열된 우선 순위 중 하나에 우선 순위 목록이 있습니다.

따라서 3 가지 기준을 사용할 때 검색어 키워드에서 첫 번째 기준에서 다른 기준이 충분합니다. 각 페이지는 30 개의 첫 번째 목록의 기본 목록, 다른 하나의 목록의 두 번째 모음이 그 이후에 나열되기를 원하는 경우 20 개의 레코드를 나열합니다.

기준에 따라 일반적으로 내 코드를 공유합니다. 제안을 기다리는 중입니다. 미리 감사드립니다.

영어 불쾌한 경우 죄송합니다.

DB::table('UserAds') 
     ->join('Ads', 'Ads.id', '=', 'UserAds.ad_id') 
     ->join('Users', 'Users.id', '=', 'UserAds.user_id') 
     ->join('AdCategory', 'AdCategory.ad_id', '=', 'Ads.id') 
     ->join('AdEducationPrices', 'AdEducationPrices.ad_id', '=', 'Ads.id') 
     ->join('City', 'City.id', '=', 'Ads.city_id') 
     ->join('Town', 'Town.id', '=', 'Ads.town_id') 
     ->leftJoin('AdMedias', 'AdMedias.ad_id', '=', 'Ads.id') 
     ->select('Ads.*', 'AdEducationPrices.*', 'City.name as city_name', 'City.id as city_id', 
            'Town.name as town_name', 'Town.id as town_id', 'AdMedias.url') 
     ->where('Ads.is_publish', 1) 
     ->whereIn('AdCategory.category_id', $new_category_array) 
     ->where('Ads.city_id', $city_id) 
     ->where('Ads.town_id', $town_id) 
     ->where('UserAds.is_purchased', true) 
     ->where('UserAds.started_at', '<', date('Y-m-d H:i:s')) 
     ->where('UserAds.finished_at', '>=', date('Y-m-d H:i:s')) 
     ->where('AdMedias.type', 'picture') 
     ->groupby('UserAds.ad_id')->orderby('finished_at', 'DESC') 
     ->orderby('started_at', 'DESC')->paginate(20); 

답변

2

2 쿼리에 array_merge을 사용했습니다. 그리고 페이 지 네이터에 대한 레코드를 필터링했습니다. 타이가 내 질문을 읽었 어. 나는 누군가를 도울 수 있기를 바랍니다

$new_collection = array_merge($Priority, $Ads); 
$new_collection_count = count($new_collection); 

$perPage = 20; 
$currentPage = Input::get('page', 1) - 1; 
$new_collection = array_slice($new_collection, $currentPage * $perPage, $perPage); 
$Ads = Paginator::make($new_collection, $new_collection_count, $perPage);