Ok, hier gehen wir. Ich werde versuchen, didaktisch zu sein.
TO
DO eine API bauen, die Datenbank zu suchen und liefert Produkte von auf URL-Parametern basieren.
Eigenschaften
Zunächst einmal haben wir ein Array mit unseren alle gültigen Eigenschaften.
$props = [
'id',
'product_name',
'barcode',
'category_id',
'description',
'price'
];
Parameter
Lassen Sie uns speichern alle Parameter, die von URL in einer Variablen kommt:
$parameters = Input::all();
Ohne Parameter
Wenn alle Parameter übergeben wurde, können wir wählen alle Produkte mit ihren Feldern und geben das Ergebnis zurück:
if (empty($parameters)) {
$products = Product::all();
return $products;
}
Organisieren Dinge
wir bedenken, dass wir 3 "Kategorien" von Parametern haben:
- , dass die Felder bestimmt, ausgewählt (optional) werden.
- Das bestimmt die Ergebnisreihenfolge (optional).
- Das bestimmt die Suchklauseln (optional).
Identifizierung der Felder
Für die erste Kategorie, werden wir den fields
Parameter verwenden, die durch Komma einen String trennt jedes Feld erhält.
$fieldsParam = $parameters['fields']; // Gets fields string.
$fieldsParamSplit = explode(',', $fieldsParam); // Split the fields string into array.
$fields = array_intersect($props, $fieldsParamSplit); // Gets only wanted fields.
Die Reihenfolge
Für die zweite Kategorie, werden wir den sortby
Parameter verwenden, die ein bestimmtes Feld (Eigenschaft) Namen erhält.
$orderProp = null;
// Check if parameter "sortby" exists and if it is valid.
if (isset($parameters['sortby']) && in_array($parameters['sortby'], $props)) {
$orderProp = $parameters['sortby'];
}
Es gibt einige Klausel?
Für die dritte Kategorie verwenden wir alle Parameter (außer den oben genannten), um die where-Klauseln der Suche zu erstellen.
$clauses = [];
foreach ($props as $prop) {
// Check if the current property is present in parameters.
if (in_array($prop, array_keys($parameters))) {
// Each item represents a where clause.
$clauses[$prop] = $parameters[$prop];
}
}
Aufbau der Sammlung
Nun, da alle paremeters validiert sind, können wir die Sammlung von Produkten aufbauen und das Ergebnis zurück.
if ($orderProp) {
$products = Product::where($clauses)->orderBy($orderProp)->get($fields);
} else {
$products = Product::where($clauses)->get($fields);
}
return $products;
Sehr nett, Sir. Sie haben auch einen Validierungsteil für die 'Felder' mit' array_intersect' hinzugefügt. Hab das nie gedacht. Ich arbeite, bis auf den letzten Code, den ich ändern muss "if ($ orderProp)" ich nehme an.Danke sir – xmhafiz
@ h44f33z oh ja, sicher –
diese Zeile muss auch geändert werden, um 'array_keys' in' // zu verwenden. Überprüfen Sie, ob die aktuelle Eigenschaft in Parametern vorhanden ist. 'if (in_array ($ prop, array_keys ($ parameters))) '. Das ist es. Jetzt möchte ich auf Basis-Controller setzen, damit es wiederverwendet werden kann. Vielen Dank – xmhafiz