我正在创建一个从这条路线获取输入的简单API:
Route::group(['middleware' => ['web']], function () {
Route::get('api/v1/ct/{dte?}', 'API\APIController@CTIntervalAPICall');
});
我尝试使用不同的if-else方法来查看是否在URL中补充了end_dte。如果是这样,则将dte作为开始日期,将end_dte作为结束日期。
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');
}
它应该使用&gt; = $ date作为开始日期,&lt; = $ end_date作为结束日期IF end_dte被补充,否则它应该只是= $ date。但我遇到了一个错误。我想知道在laravel中这样做的正确方法是什么。
答案 0 :(得分:0)
没有Laravel专家,但这种语法纯粹是无效的PHP语法
$ct_interval= CTInterval::select()
if(input::has('end_dte')){
->where('dte', '>=', $date)
->where('dte', '<=', $end_date);
}
else {
->where('dte', $date);
}
你可能想告诉我们实际的错误,虽然我很确定它是一个Parse错误。
我认为您的意思是$ct_interval = $ct_interval->where('dte', '>=', $date)
,而不是随意在代码中提供箭头。
下面两行你以正确的方式使用它。只需终止select
语句并将where子句添加到已创建的变量中。
答案 1 :(得分:0)
我设法使用此操作来控制操作员:
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);
}