首页 > 解决方案 > Laravel 有条件的 where 与 eloquent

问题描述

我有传递简单参数的基本功能:

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

现在我想让它成为confitional,如果有一个参数或没有:

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 变得更简单?

标签: laravel

解决方案


使用when条件函数以获得更好的代码样式,例如 查看更多

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

推荐阅读