Ларавел условно с красноречивым - PullRequest
0 голосов
/ 11 октября 2018

У меня есть базовая функция, по которой я передаю простой параметр:

public function template($person)
{
      $offers = Offer::where([
          ['person', $person],
          ['published', true],
      ])
      ->orderBy('created_at','desc')->paginate(9);   
 }

Теперь я хочу сделать его конфиденциальным, если есть параметр или нет:

public function template($person)
{
   if ($person) {
      $offers = Offer::where([
          ['person', $person],
          ['published', true],
      ])
      ->orderBy('created_at','desc')->paginate(9);   
   } else {
      $offers = Offer::where([
          ['published', true],
      ])
      ->orderBy('created_at','desc')->paginate(9);   
   }
}

это работает, но это не очень хорошая практика, что если у меня будет больше параметров:

public function template($person, $country, $region) {
  ....
}

Тогда мне придется сделать несколько случаев.Есть ли какая-нибудь вспомогательная функция для eloquent, чтобы упростить ее?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Laravel предлагает когда (), который позволяет вам запускать замыкание при успешном выполнении условия и работает для цепочки:

Offer::where('published', true)
   ->when($person, function($query) use ($person) {
       $query->where('person',$person);
   })
   ->orderBy('created_at','desc')
   ->paginate(9);

Хотя, я думаю, проще просто не связывать все в этих обстоятельствах, особенно когдаВаши условия усложняются:

$query = Offer::where('published', true) 
   ->orderBy('created_at','desc');

if ($person) {
    $query->where('person',$person);
}

return $query->paginate(9);

Я предполагаю, что вы также пропускаете вызов return в своих функциях, который я добавил в последнем примере.

0 голосов
/ 11 октября 2018

используйте when функцию для условия для лучшего кода sytle, как это подробнее

$offers = Offer::when($person,function($query,$person) {
        return $query->where('person',$person);
})->where('published', true)
      ->orderBy('created_at','desc')->paginate(9); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...