2016-03-15 23 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