2017-04-12 3 views
0

Ich habe Laravel Anwendung, wo BenutzerWie wird die Adresse in der Datenbank gespeichert?

area 
region 
city 
locality 
street 

Jedes Feld ist einfach integer (Fremdschlüssel zur Tabelle, die alle Adressen mit ihren Eltern-Kind-Beziehung enthält) Adresse auswählen können. Zum Beispiel hat der Bereich und 2 cities.

Ich möchte diese Informationen in mysql-Datenbank speichern, aber es gibt einige Probleme.

Es gibt eine Menge Code, der gut funktioniert und alle Updates für alle Modelle verarbeitet (speichert Informationen darüber, was mit Diffs von Updates geändert wurde).

Wenn ich diese Felder bei 5 verschiedenen Spalten speichere, muss ich Code in verschiedenen Teilen der Anwendung hinzufügen, um sie zu verarbeiten (auswählen, aktualisieren, anzeigen), da dieser Code vom Feldtyp (Text, Ganzzahl, Auswahl) abhängt usw. gibt es eine separate Konfiguration, die diese Spalten beschreibt).

ich möchte es speichern, in json Spalte wie diese

{"area": 10, "city": 335} 

Dann kann ich einfach neue columns hinzufügen, aber was Geschwindigkeit dieser Lösung, da diese Felder werden in Filter verwendet werden, und es wird bei mindestens 50.000 Zeilen in der Tabelle.

Antwort

0

Verwenden Sie die Laravel $ wirft Parameter auf Ihrem Modell see here:

protected $casts = [ 
    'address' => 'array', 
]; 

$record = SomeModel::find(1); 

// $address is an array... 
$address = $record->options; 

// address is automatically serialized back to JSON... 
$user->address = ["area" => 10, "city" => 335]; 
+1

Laravel verwaltet intern * cast * -Felder und ruft JSON aus der Tabelle als PHP-Array ab und speichert PHP-Array als Json, aber stellen Sie in der Migrationsdatei sicher, dass der Feldtyp Text ist. –

0

Wenn Sie Filter über Ihre Adresse dann seine dringend empfohlen, sie in separaten Spalten zu machen, auch wenn sie erfordern Änderung an verschiedenen Orten in Ihrer Bewerbung.

Und durch Filter meine ich, das Ergebnis zu filtern, während die Abfrage wie Sie Zeilen erhalten möchten, wo area ist 10 und so weiter.

Wenn Sie die Daten nach dem Abruf aus der Datenbank filtern können, können Sie den Datentyp text sehr gut verwenden, um die JSON-Zeichenfolge in der Datenbank zu speichern und nach dem Abrufen aus der Datenbank json_decode herauszufiltern.

Dieser letzte Fall ist tatsächlich vorteilhaft, wenn Sie Ergebnis in Paginierung ohne Ergebnis insgesamt Anzahl der gefundenen Ergebnisse herausnehmen.

In diesem Fall können Sie Ihre Datenbank nach jeweils 10 Zeilen (oder der Anzahl der Ergebnisse, die Sie pro Seite anzeigen möchten) abfragen, sie nach dem Abruf filtern und dann mehr holen, wenn sie das Limit nicht erreicht. Verfolgen Sie den Offset für weitere Abfragen.

Verwandte Themen