2016-12-07 1 views
0

Wie würde ich den Code Refactoring, so dass es nur eine ablehnen Funktion nicht zwei und haben nur einen Aufruf an die db statt drei. Ich versuche auch, keine Duplikate zu haben.Wie würde ich zwei Zurückweisungsfunktionen mit PHP/Laravel kombinieren?

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

Antwort

1

Ich weiß nicht, wie Sie $latestListingsIds und $highCflListingIds sind einstellen, aber wenn diese nur Arrays von IDs sind, kombinieren sie und lehnen auf denen:

$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

Dank für Ihre Antwort danken, aber diese scheint Duplikate zu erlauben. Was ich versuche, ist keine Duplikate. – Crystal

+0

Duplikate von was? Es lehnt alle Datensätze mit einem Primärschlüsselwert ab, der in '$ exclude' auftritt. –