2016-10-04 79 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中的變量爲空,只返回我有->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'); 
     } 
    }) 
相關問題