type) { switch ($request->type) { case BreederType::egg(): $showEgg = true; $this->getEggBreeders($request, $breeders); break; case BreederType::poultry(): $showPoultry = true; $this->getPoultryBreeders($request, $breeders); break; default: throw new \ErrorException("Unhandled BreederType type '$request->type'"); } } else { $showEgg = true; $showPoultry = true; $this->getEggBreeders($request, $breeders); $breeders = $breeders->union(function ($q) use ($request) { $this->getPoultryBreeders($request, $q); }); }//end if /** @var \Illuminate\Pagination\LengthAwarePaginator */ $breeders = $breeders->orderBy('cafel_code', 'DESC')->paginate(); if ($showEgg) { /** @var \Illuminate\Database\Eloquent\Builder $eggBreeders */ $eggBreeders = CafelEggBreeder::whereIn( 'cafel_code', $breeders->getCollection()->pluck('cafel_code')->all() ); $eggBreeders = $eggBreeders->get(); } if ($showPoultry) { /** @var \Illuminate\Database\Eloquent\Builder $poultryBreeders */ $poultryBreeders = CafelPoultryBreeder::whereIn( 'cafel_code', $breeders->getCollection()->pluck('cafel_code')->all() ); $poultryBreeders = $poultryBreeders->get(); } switch (true) { case $showEgg and $showPoultry: $breeders->setCollection($eggBreeders->merge($poultryBreeders)->sortBy('cafel_code')); break; case $showEgg: $breeders->setCollection($eggBreeders); break; case $showPoultry: $breeders->setCollection($poultryBreeders); break; } // * Randomize $breeders->setCollection($breeders->getCollection()->sortBy('cafel_code')); $searchFields = trans('Code Cafel, EDE, INUAV, Nom, Prénom, Ville, Code postal'); return view('back.breeders.index', [ 'breeders' => $breeders, 'searchFields' => $searchFields ]); } /** * View breeder * * @param \App\Models\CafelEggBreeder|\App\Models\CafelPoultryBreeder $breeder * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory * @throws \ErrorException If $breeder model is unhandled. */ public function show($breeder) { if (!($breeder instanceof CafelEggBreeder) and !($breeder instanceof CafelPoultryBreeder)) { throw new \ErrorException(__METHOD__ . 'Only handles egg and poultry breeder classes'); } return view('back.breeders.show', compact('breeder')); } /** * Query poultry breeders * * @param BreederIndexRequest $request * @param Builder $breeders * @return void */ private function getPoultryBreeders(BreederIndexRequest $request, Builder &$breeders) { $breeders->select('cafel_code')->from('cafel_poultry_breeders'); if ($request->search) { $this->searchQuery( $breeders, 'cafel_poultry_breeders', $request->search, 'cafel_code', 'firstname', 'lastname', 'city', 'postcode', 'inuavs' ); } } /** * Query Egg breeders * * @param BreederIndexRequest $request * @param Builder $breeders * @return void */ private function getEggBreeders(BreederIndexRequest $request, Builder &$breeders) { $breeders = $breeders->select('cafel_code')->from('cafel_egg_breeders'); if ($request->search) { $this->searchQuery( $breeders, 'cafel_egg_breeders', $request->search, 'cafel_code', 'ede_code', 'firstname', 'lastname', 'city', 'postcode', 'inuavs' ); } } }