2016-04-04 10 views
1

bu rotadan girdi alır basit bir API yaratıyorum içinde $ _GET değeri ve kullanımı almakla: olmadığını görmek için farklı if-else yöntem kullanılarakUygun olursa-Else laravel

Route::group(['middleware' => ['web']], function() { 
    Route::get('api/v1/ct/{dte?}', 'API\[email protected]'); 
}); 

denedim URL'de bir end_dte eklenir. Eğer öyleyse, başlangıç ​​tarihi olarak son tarihi ve bitiş tarihi olarak son_düzeyi alır.

public function CTIntervalAPICall(Request $dte) 
    { 
     $date = $dte->dte; 
// $end_date = $dte->end_dte; 
     $end_date = Input::get('end_dte'); 
     $element_language = $dte->language; 
     $element_customer = $dte->customer; 
     $element_contract = $dte->contract; 
     $element_subcontract = $dte->subcontract; 
     $element = $dte->element; 
     $ct_interval= CTInterval::select()  
     if(input::has('end_dte')){ 
     ->where('dte', '>=', $date) 
     ->where('dte', '<=', $end_date); 
     } 
     else { 
     ->where('dte', $date); 
     } 
     if(isset($_GET['customer'])){ 
     $ct_interval = $ct_interval->where('element_customer', $element_customer); 
     } 
     if(isset($_GET['contract'])){ 
     $ct_interval = $ct_interval->where('element_contract', $element_contract); 
     } 
     if(isset($_GET['subcontract'])){ 
     $ct_interval = $ct_interval->where('element_subcontract', $element_subcontract); 
     } 
     if(isset($_GET['language'])){ 
     $ct_interval = $ct_interval->where('element_language', $element_language); 
     } 
     if(isset($_GET['element'])){ 
     $ct_interval = $ct_interval->where('element', $element); 
     } 
     $ct_interval = $ct_interval->get()->toArray(); 
     function array_to_xml($data, &$xml_data) { 
      foreach($data as $key => $value) { 
       if(is_array($value)) { 
        $key = 'Exception'; 
        $subnode = $xml_data->addChild($key); 
        array_to_xml($value, $subnode); 
       } else { 
        $xml_data->addChild("$key",htmlspecialchars("$value")); 
       } 
      } 
     } 
     $xml_data = new SimpleXMLElement('<?xml version="1.0"?><ctForecast></ctForecast>'); 
     array_to_xml($ct_interval,$xml_data); 
     $result = $xml_data->asXML(); 
     return Response::make($result, '200')->header('Content-Type', 'text/xml'); 
    } 

aksi takdirde sadece = $ tarihi olmalıdır, end_dte takviye edilir EĞER bitiş tarihi olarak başlangıç ​​tarihi ve < = $ end_date olarak> = $ tarihini kullanmak gerekiyordu. Ama bir hatayla karşılaşıyorum. Bunu lağımda yapmanın doğru yolunun ne olduğunu merak ediyorum. Ben oldukça emin bir Ayrıştırma hatası olsa

cevap

0

Bunu kullanarak operatörü kontrol etmeyi başardı
0

Hayır laravel uzmanı, ancak bu sözdizimi, tamamen geçerli PHP sözdizimi

$ct_interval= CTInterval::select()  
    if(input::has('end_dte')){ 
    ->where('dte', '>=', $date) 
    ->where('dte', '<=', $end_date); 
    } 
    else { 
    ->where('dte', $date); 
    } 
Sen gerçek hata ne olduğunu bize vermek isteyebilirsiniz

değil.

Kodunuzda sadece rastgele oklar yerine $ct_interval = $ct_interval->where('dte', '>=', $date) demek istediniz.

Aşağıdaki iki satır, doğru yolu kullandı. Sadece select ifadesini sonlandırın ve önceden oluşturulmuş değişkene ilişkin tümceleri ekleyin.

public function CTIntervalAPICall(Request $dte) 
    { 
     $date = $dte->dte; 
     if(Input::get('end_dte')) { 
     $end_date = Input::get('end_dte'); 
     $operator = '>='; 
     } 
     else { 
     $operator = '='; 
     } 
     $element_language = $dte->language; 
     $element_customer = $dte->customer; 
     $element_contract = $dte->contract; 
     $element_subcontract = $dte->subcontract; 
     $element = $dte->element; 
     $ct_interval= CTInterval::select() 
     ->where('dte', $operator, $date); 
     if(isset($_GET['end_dte'])){ 
     $ct_interval = $ct_interval->where('dte', '<=', $end_date); 
     } 
: