PHP Laravel:比这些if语句更好的方法

Mic*_*ger 0 php laravel eloquent

我需要将佣金分配给新创建的价格.佣金适用于客户,类型和价格.因此,如果有类型佣金,它应该首先获得它,回退到客户端,回退到默认值.

我的代码有效,但感觉有点"if-y".也许有更好的方法吗?

  private function addDefaultOnlineCommission(Price $price)
   {
       $defaultCommission = (object)Commission::DEFAULT_COMMISSIONS;

       $typeCommission = $price->type->commissions()
           ->where('is_online', '=', true)->first();

       $clientCommission = $price->type->client->commissions()
           ->where('is_online', '=', true)->first();


       if (!$clientCommission && !$typeCommission) {
           $commission = $defaultCommission;
       }

       if ($clientCommission && !$typeCommission) {
           $commission = $clientCommission;
       }

       if ($typeCommission) {
           $commission = $typeCommission;
       }

       $price->commissions()->create([
           'commission_type'   => $commission->commission_type,
           'commission_value'  => $commission->commission_value,
           'min_value'         => $commission->min_value,
           'is_online'         => true,
           'valid_from'        => Carbon::now()->format('Y-m-d H:i:s'),
       ]);
   }
Run Code Online (Sandbox Code Playgroud)

Dev*_*von 6

纯粹自以为是,但我会使用空合并运算符来处理它:

$commission = $typeCommission ?? $clientCommission ?? $defaultCommission;
Run Code Online (Sandbox Code Playgroud)

这将使用第一个非null值.因此它从左到右设置优先级.