検索機能を実装する際のコードの書き方について

検索機能を実装した当初、年月・部署・名前を全て指定しないと正常に検索結果が表示されなかった。
いずれかの項目が入力されなかった場合でも、条件一致するテーブルを表示させるために下記のようなコードを書いた。

sub kikaito :Local {
    my ( $self, $c ) = @_;
    $c->stash->{kikais} = [$c->model("DB::Kikai")->all];
    my $params = $c->req->params;
  
    if ( !($params->{yyyymm}) && $params->{department} && !($params->{name})){
        $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department => $params->{department}})];
    } elsif (!($params->{yyyymm}) && $params->{department} && ($params->{name    })) {
        $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department     => $params->{department}, name => $params->{name}})];
    } elsif (!($params->{yyyymm}) && !($params->{department}) && ($params->{name})) {
        $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ name => $params->{name}})];
    } elsif ( $params->{yyyymm} && !($params->{department}) && $params->{name}) {
        $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm         => $params->{yyyymm}, name => $params->{name}})];
    } elsif ( $params->{yyyymm} && $params->{department} && !($params->{name})) {
    $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm             => $params->{yyyymm}, department => $params->{department}})];
} elsif ( $params->{yyyymm} && !($params->{department}) && !($params->{name})) {
        $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}})];
    }
}

とても見辛い、、
絶対もっと良い書き方があるよねと同期と話してた。