Heim > PHP-Framework > Laravel > Ausführliche Erklärung zum Einrichten von Untertabellen für Beziehungen zwischen Laravel-Modellen

Ausführliche Erklärung zum Einrichten von Untertabellen für Beziehungen zwischen Laravel-Modellen

藏色散人
Freigeben: 2020-04-10 13:23:32
nach vorne
3160 Leute haben es durchsucht

Ausführliche Erklärung zum Einrichten von Untertabellen für Beziehungen zwischen Laravel-Modellen

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;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage