2016-03-15 46 views
1

我有一個簡單的API,簡單地獲取_GET變量並將它們用作我的控制器中的Where子句。如果語句不工作在Laravel控制器

public function MUIntervalAPICall(Request $dte) 
    { 
     $date = $dte->dte; 
     $element_language = $dte->language; 
     $element_customer = $dte->customer; 
     $element_contract = $dte->contract; 
     $element_subcontract = $dte->subcontract; 
     $element = $dte->element; 
     $mu_interval= MUInterval::select('element_customer', 'element_contract', 'element_subcontract', 'element_language', 'element_site', 'element', 'src_id', 'src_type_id', 'dte', 'intvl', 'val_src_id', 'exception_name', 'duration_seconds', 'duration_fte') 
     ->where('dte', $date) 
     if(isset($_GET['customer'])){ 
     ->where('element_customer', $element_customer) 
     } 
     ->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"?><muExceptions></muExceptions>'); 
     array_to_xml($mu_interval,$xml_data); 
     $result = $xml_data->asXML(); 
     return Response::make($result, '200')->header('Content-Type', 'text/xml'); 
    } 
} 

它只是檢查URL是否在URL中設置了客戶。例如2016-14-03?客戶=蘋果。但由於某種原因,我得到這個錯誤: enter image description here

我註釋了if語句和右大括號,它實際上工作並提取日期和客戶。

->where('dte', $date) 
->where('element_customer', $element_customer) 
->get() 
->toArray(); 

我想知道是否有我缺少的命名空間,或者如果'if'語句不適用於這樣的控制器。

回答

1

這是它如何工作的:

$mu_interval= MUInterval::select('element_customer', 'element_contract', 'element_subcontract', 'element_language', 'element_site', 'element', 'src_id', 'src_type_id', 'dte', 'intvl', 'val_src_id', 'exception_name', 'duration_seconds', 'duration_fte') 
     ->where('dte', $date); 

if(isset($_GET['customer'])){ 
    $mu_interval = $mu_interval->where('element_customer', $element_customer) 
} 

$mu_interval = $mu_interval->get()->toArray(); 
+0

我嘗試了上面的內容,並且在APIController.php中得到了一個FatalErrorException第4行:命名空間聲明語句必須是第一個語句或在腳本中的任何聲明調用之後。第4行是控制器所在的位置.namespace App \ Http \ Controllers \ API; – Odinovsky

+0

只需檢查命名空間聲明之前是否有任何內容。文件應該從'<?php'開始,在第三行你應該有類似'namespace App \ Http \ Controllers \;' –

+0

Nice ..這真的很有用..謝謝很多先生.. :)我;我得到了(0)使用error_reporting;命名空間前.. – Odinovsky

1

你不能這樣做方法鏈接。嘗試 -

$mu_interval= MUInterval::select('element_customer', 'element_contract', 'element_subcontract', 'element_language', 'element_site', 'element', 'src_id', 'src_type_id', 'dte', 'intvl', 'val_src_id', 'exception_name', 'duration_seconds', 'duration_fte') 
       ->where('dte', $date); 

if(isset($_GET['customer'])){ 
    $mu_interval = $mu_interval->where('element_customer', $element_customer); 
} 
+0

你的代碼得到的錯誤,它應該是'$ mu_interval = $ mu_interval->在哪裏( 'element_customer',$ element_customer); ' –

+0

我的壞。錯過了那一個。 –

+0

我嘗試了上面的內容,並且在APIController.php中得到了一個FatalErrorException:第4行:命名空間聲明語句必須是第一個語句或在腳本中的任何聲明調用之後。第4行是控制器所在的位置.namespace App \ Http \ Controllers \ API; – Odinovsky