2016-12-07 11 views
0

2つではない拒否機能が1つしかなく、3つではなく1つのDBを呼び出すように、以下のコードをどのようにリファクタリングしますか。私はまた重複を持たないようにしています。PHP/Laravelで2つのリジェクト関数をどのように組み合わせるのですか?

$latestListings = $repo->whereExclusive(['property_status' => 'Active'],['created_at' => 'desc'],[],0, 4); 

    $latestListingsIds = $latestListings->map(function (Listing $listing) { 
     return $listing->id; 
    })->toArray(); 

    $highCflListings = $repo->whereExclusive(['property_status' => 'Active'],['cfl' => 'desc'],[],0, 4); 

    $highCflListingIds = $highCflListings->map(function (Listing $listing) { 
     return $listing->id; 
    })->toArray(); 


    $highCflListingsOccupied = $repo->whereExclusive(
     ['property_status' => 'Active', 'occupied_percentage' => 100], 
     ['cfl' => 'desc'], 
     [], 
     0, 
     12 
    )->reject(function (Listing $listing) use ($latestListingsIds) { 
     return in_array($listing->id, $latestListingsIds); 
    })->reject(function (Listing $listing) use ($highCflListingIds) { 
     return in_array($listing->id, $highCflListingIds); 
    })->take(4); 

答えて

1

私はあなたが$latestListingsIds$highCflListingIdsを設定しているのか分からないが、これらは、IDの単なる配列である場合、それらを結合し、それらの上拒否:

$exclude = $latestListingsIds + $highCflListingIds; 

$highCflListingsOccupied = $repo->whereExclusive(['property_status' => 'Active', 'occupied_percentage' => 100], ['cfl' => 'desc'], [], 0, 12) 
    ->reject(function (Listing $listing) use ($exclude) { 
     return in_array($listing->id, $exclude); 
    }) 
    ->take(4); 
+0

しかし、この、あなたの答えをありがとう重複を許しているようだ。私がしようとしているのは重複がないということです。 – Crystal

+0

何が重複していますか? '$ exclude'で発生するプライマリキー値を持つレコードはすべて拒否されます。 –

関連する問題