2016-10-04 7 views
0

私はlaravel 4.2を学んでいますが、私はコンストラクタクエリーの雄弁に疑問を抱いています。次のコード

public static function filterInvoicingReport($valuesFilter){ 

    $fechaInicio=''; 
    $fechaFin=''; 
    $customerId=''; 
    $state=''; 
    if($valuesFilter == null) 
     return; 

    //obtenemos los valores de las variables dateRegisterStart y dateRegisterEnd 
    if(array_key_exists('fechaInicio', $valuesFilter)&&array_key_exists('fechaFin', $valuesFilter)){ 
     $fechaInicio=$valuesFilter['fechaInicio']; 
     $fechaFin=$valuesFilter['fechaFin']; 
    } 
    if(array_key_exists('customerId',$valuesFilter)){ 
     $customerId=$valuesFilter['customerId']; 
    } 
    if(array_key_exists('state',$valuesFilter)){ 
     $state=$valuesFilter['state']; 
    } 



    $sql= DB::table('invoice') 
     -> select(
      'invoice.id_invoice', 
      'invoice.invoice_number', 
      'invoice.created_date', 
      'invoice.name_seller', 
      'invoice.conditions', 
      'invoice.total_sale', 
      'invoice.status', 
      'invoice.customerId', 
      'customer.name as customerName', 
      'customer.identificationId as customerDNI') 
     -> whereBetween(DB::raw('DATE_FORMAT(invoice.created_date,"%Y-%m-%d")'),[$fechaInicio,$fechaFin]) 
     ->Where('invoice.status','=',$state) 
     ->Where('invoice.customerId','=',$customerId) 
     -> join('customer','customer.customerId','=','invoice.customerId'); 
     -> get(); 
    return $sql; 
} 

レポートのクエリです、問題は$state$customerIdを空にできることである、とクエリがすべての空を返します。

私が欲しいのは、PHPの変数が空の場合、nullを返さない変数がある->whereだけを返すことです。

答えて

2

あなたwhere句にサブクエリを追加します。

->Where(function ($query) use ($state){ 
     if(!empty($state)) { 
      $query->where('invoice.status','=',$state); 
     } else { 
      $query->whereNotNull('invoice.status'); 
     } 
    }) 
    ->Where(function ($query) use ($customerId){ 
     if(!empty($customerId)) { 
      $query->where('invoice.customerId','=',$customerId); 
     } else { 
      $query->whereNotNull('invoice.customerId'); 
     } 
    }) 
関連する問題