2016-04-04 2 views
1

Ich bin eine einfache API erstellen, die eine Eingabe von dieser Route führt:

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

Ich habe versucht, verschiedene if-else-Methode zu verwenden, wenn zu sehen Eine end_dte wird in der URL ergänzt. Wenn dies der Fall ist, wird der Tee als Startdatum und die End_Dte als Enddatum verwendet.

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'); 
    } 

Es sollte das> = $ Datum als Startdatum und < = $ end_date als Enddatum verwenden, wenn end_dte ergänzt wird, sonst sollte es nur = $ date sein. Aber mir läuft ein Fehler auf. Ich frage mich, wie man das in Laravel richtig macht.

Antwort

0

ich es geschafft, den Bediener mit diesem zu steuern:

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); 
     } 
0

Kein Laravel Experte, aber diese Syntax ist rein nicht gültig PHP Syntax

$ct_interval= CTInterval::select()  
    if(input::has('end_dte')){ 
    ->where('dte', '>=', $date) 
    ->where('dte', '<=', $end_date); 
    } 
    else { 
    ->where('dte', $date); 
    } 

Sie möchten uns geben, was der tatsächliche Fehler ist, obwohl ich ziemlich sicher, dass es ein Fehler Parse ist.

Ich denke, du meinst $ct_interval = $ct_interval->where('dte', '>=', $date) anstatt nur zufällig zuführen Pfeile in Ihrem Code.

Zwei Reihen unter Ihnen haben es richtig benutzt. Beenden Sie einfach die select-Anweisung, und fügen Sie der bereits erstellten Variablen where-Klauseln hinzu.