In der tatsächlichen Entwicklung werden häufig Unterdatenbanken und Tabellen verwendet. Zu diesem Zeitpunkt ist zum Abfragen von Daten die Einrichtung von Untertabellen erforderlich Methode:
/** * Set the table associated with the model. * * @param string $table * @return $this */public function setTable($table){ $this->table = $table; return $this; }
Um dann die Datentabelle hinzuzufügen, zu löschen, zu ändern und abzufragen, müssen Sie zuerst 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.
Weitere technische Artikel zum Laravel-Framework finden Sie in der Spalte Laravel-Tutorial!
Das obige ist der detaillierte Inhalt vonEinführung in die Methode 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!