Я использую Laravel для API и пытаюсь извлечь несколько переменных _GET, которые пользователь будет вводить.
код выглядит следующим образом, когда используются все фильтры:
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;
//all filters
if(isset($_GET['customer']) && isset($_GET['language']) && isset($_GET['contract']) && isset($_GET['subcontract']) && isset($_GET['element']))
{
$where = ['dte' => $date, 'element_language' => $element_language, 'element_customer' => $element_customer, 'element_contract' => $element_contract, 'element_subcontract' => $element_subcontract, 'element' => $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($where)
->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');
}
Теперь пользователь хотел бы отфильтровать его только несколько переменных в месте. например дату и клиент, или только язык и контракт. В настоящее время я пишу длинный блок, если-иначе заявления для получения результатов (очень долго, чтобы включать в себя все возможности для шести $ _GET переменных):
elseif(isset($_GET['subcontract']) && isset($_GET['element']))
{
$where = ['dte' => $date, 'element' => $element, 'element_subcontract' => $element_subcontract];
}
Есть ли более короткий способ для такого длительного If- else заявления?
Пожалуйста, смотрите мой ответ на http://stackoverflow.com/questions/35431412/creating-a-filterable-list-using-laravel-and-eloquent-queries/35433377#35433377 Это может помочь абстрагировать логика вашей фильтрации в класс. – Mysteryos