Heim  >  Artikel  >  Backend-Entwicklung  >  Untertabelle zur Einstellung der Laravel-Modellbeziehungen

Untertabelle zur Einstellung der Laravel-Modellbeziehungen

不言
不言Original
2018-04-21 14:11:092083Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Einrichten von Untertabellen für Beziehungen zwischen Laravel-Modellen ein Es kann folgen. Lernen wir gemeinsam mit dem Herausgeber.

Was ist Eloquent?

Eloquent ist ein ORM, der vollständige Name ist Object Relational Mapping, übersetzt als „Object Relational Mapping“ (wenn Sie beziehen Sie sich einfach darauf. Es wäre zu unterschätzt, es als Datenbankabstraktionsschicht (Array-Bibliotheksabstraktionsschicht) zu betrachten. Das sogenannte „Objekt“ wird in diesem Artikel als „Modell“ bezeichnet; die Objektbeziehungszuordnung ist die Beziehung zwischen Modellen. Chinesisches Dokument: http://laravel-china.org/docs/eloquent#relationships

Angebot

In der tatsächlichen Entwicklung Sub -Datenbanken und Tabellen werden häufig verwendet. Die Benutzertabelle ist derzeit in 100 Tabellen unterteilt. Für die Abfrage von Daten ist beispielsweise die Einrichtung von Untertabellen erforderlich:

/**
 * 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);

Dies ist sehr einfach. So richten Sie Untertabellen ein, wenn die Beziehung zwischen Modellen wie HasOne, HasMany usw. besteht. nutzt diese Methode?

Ich habe nach langer Suche keine gute Lösung gefunden und mir die Implementierungsmethode der HasOne-Funktion der Model-Klasse angesehen Namen, also musste ich die HasOne-Methode kopieren und ändern. Ändern Sie es beispielsweise in myHasOne, fügen Sie den Parameter $table hinzu, um den Tabellennamen festzulegen, und rufen Sie setTable auf, nachdem das Objekt instanziiert wurde. Dann funktioniert es wie erwartet.

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 Sie einen eleganteren Weg haben.

Verwandte Empfehlungen:

Laravels Methode zum Laden von Klassenbibliotheken von Drittanbietern

Implementierung der Suchfunktion durch das Laravel-Framework

Das obige ist der detaillierte Inhalt vonUntertabelle zur Einstellung der Laravel-Modellbeziehungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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