2016-03-15 2 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? Клиент = Apple. Но по какой-то причине я получаю эту ошибку: enter image description here

Я прокомментировал инструкцию if и заключительную фигуру, и она фактически работает и выбирает дату и клиента.

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

мне интересно, если есть пространство имен я пропускаю, или если «если» заявление не применяется в таком контроллере.

ответ

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

Я пробовал выше, и я получаю исключение FatalErrorException в строке APIController.php 4: заявление о декларации пространства имен должно быть самым первым утверждением или после любого объявления в сценарии. Строка 4 - это место, где находится контроллер. Пространство имен App \ Http \ Controllers \ API; – Odinovsky

+0

Просто проверьте, есть ли у вас что-либо перед объявлением пространства имен. Файл должен начинаться с '

+0

Ницца .. это действительно полезно ... Спасибо большое сэр .. :) Я получил error_reporting (0); перед пространством имен. – 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

Я пробовал выше, и я получаю исключение FatalErrorException в строке APIController.php 4: заявление о декларации пространства имен должно быть самым первым утверждением или после любого объявления в сценарии. Строка 4 - это место, где находится контроллер. Пространство имен App \ Http \ Controllers \ API; – Odinovsky