Ich erstelle eine API in Lumen zu erzeugen, und ich brauche, ein Verfahren zu schaffen, die stammt aus zwei columsauf dem gleichen Tisch bekommen und geben Sie alle Jahre, die zwischen diesen Daten auftreten, alle als ein einzelnes Array zurück.Wie eine Liste der einzigartigen Jahren zwischen mehreren Terminen in Lumen/Laravel
So zum Beispiel, stellen Sie sich eine Tabellenspalte namens start_date
und einen anderen Namen end_date
start_date | end_date getAllYears() should return =>
[1983, 1984, 1985, 1986, 1987,
1999, 2000, 2001, 2002, 2003,
..., 2016]
1999-05-09 | 2002-04-03
1983-03-12 | 1987-09-23
2001-02-12 | 2016-11-27
Zur Zeit habe ich eine Methode, die dies auf andere Arten von spezifischeren Abfragen, das Hauptproblem bei diesem Versuch zu tun, schafft, ist, dass aufgrund der Masse der SQL-Datensätze, die ich abrufe, eine Methode wie diese meine Anfrage veranlasst, jedes Mal eine Zeitüberschreitung auszuführen.
MY ineffiziente Methode , die wenig Gebrauch von Lumen/Laravel
public function getAllYears(){
$dates = $this->model->select('data_ini', 'data_fim')->get();
$results = [];
foreach ($dates as $obj){
$carbonBegin = Carbon::createFromDate($obj->data_ini->year);
$carbonEnd = Carbon::createFromDate($obj->data_fim->year);
if($carbonEnd->year === 9999){
$carbonEnd->year = date('Y');
}
$carbonEnd->year++;
// Simple method that runs a DatePeriod method
$dateRange = $this->helper->createDateRange($carbonBegin, $carbonEnd);
$results = array_merge($results, $dateRange);
}
sort($results);
$cleanYears = array_unique($results);
if ($cleanYears == null)
return response()->json(['error' => true, 'errorCode' => '1008', 'message' => "No years found!"]);
else
return response()->json(['error' => false, 'years' => $cleanYears]);
}
So macht, ist die Frage, wie kann ich dies tun, in eine weniger teure Art und Weise, so dass mein Server nicht Zeit auf jede Anfrage? Vielen Dank im Voraus für Ihre Hilfe :)
HINWEIS: DB: roh ist ein No-Go, wie meine TL mich verwenden es überall auf der API
Sie liegen nicht falsch, aber Sie benötigen unformatierte Abfragen, um mysql-Funktionen zu verwenden. –
Großartig, das sieht so aus, als könnte es funktionieren, ich muss nur min und max Jahre vorher analysieren und weiterleiten, aber ich habe ein anderes Problem, in meiner 'data_fim'-Spalte haben einige der Daten das Jahr' 9999 ' soll auf das aktuelle Jahr umgestellt werden, eine einfache Möglichkeit, dies mit Query Builder zu tun? – JonnySerra