In der tatsächlichen Entwicklung werden häufig Unterdatenbanken und Tabellen verwendet. Beispielsweise ist die Benutzertabelle in 100 Tabellen unterteilt. Zum Abfragen der Daten müssen derzeit Untertabellen eingerichtet werden . setTable wird beispielsweise in der Model-Klasse von Laravel bereitgestellt:
Empfohlenes Tutorial: „Laravel-Tutorial“
/** * Set the table associated with the model. * * @param string $table * @return $this */ public function setTable($table) { $this->table = $table; return $this; }
Dann zum Hinzufügen, Löschen, Ändern und Abfragen Für die Datentabelle müssen Sie zunächst eine neue Modellinstanz erstellen und dann den Tabellennamen festlegen. Zum Beispiel:
(new Circle())->setTable("t_group_" . hashID($userid, 20)) ->newQuery() ->where('group_id', $request->group_id) ->update($attributes);
Das ist sehr einfach. Wenn also die Beziehung zwischen Modellen wie HasOne, HasMany usw. diese Methode verwendet, wie richtet man dann die Untertabelle ein?
Nach langer Suche konnte ich keinen guten Weg finden. Am Beispiel von HasOne musste ich die HasOne-Methode in der Model-Klasse kopieren, in myHasOne ändern und den Tabellennamen übergeben und rufen Sie setTable auf, nachdem das Objekt in der Funktion instanziiert wurde. Natürlich ist dies möglich.
Der Code lautet wie folgt:
public function detail() { return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20)); } public function myHasOne($related, $foreignKey = null, $localKey = null, $table) { $foreignKey = $foreignKey ?: $this->getForeignKey(); $instance = (new $related)->setTable($table); $localKey = $localKey ?: $this->getKeyName(); return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey); }
Ich frage mich, ob jemand einen eleganteren Weg hat.
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum Einrichten von Untertabellen für Beziehungen zwischen Laravel-Modellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!