Frage

Wenn in meiner Anwendung ein Eloquent-Modell definiert ist, das eine Reihe unterschiedlicher Beziehungen zu anderen Modelltypen aufweist, wie kann ich dann Informationen zu all diesen Beziehungen erhalten, ohne etwas anderes über das Modell zu wissen, mit dem ich es zu tun habe?

Stellen Sie sich zum Beispiel ein einfaches Transaktionsmodell vor, das viele Zeilen haben und auch einem einzelnen Benutzer gehören kann.

Wie kann ich nun anhand einer Instanz des Transaktionsmodells (entweder bevölkert oder unbevölkert) herausfinden, welche Beziehungen es zu den anderen Modellen hat?

Um es klarzustellen: Ich möchte nicht die tatsächlichen zugehörigen Daten abrufen, sondern nur herausfinden, auf welche Klasse sich jede Beziehung bezieht und ob es sich um eins zu viele, viele zu viele usw. handelt.

Jeder Rat ist willkommen.

Danke

War es hilfreich?

Lösung

Die eloquenten Modelle von Laravel funktionieren nicht auf diese Weise. Beziehungen werden durch Methoden innerhalb des Modells definiert und bei der Instanziierung nicht automatisch vom Modell geladen. Daher ist es erforderlich, diese Methoden tatsächlich aufzurufen, wenn Sie eine bestimmte Beziehung verwenden möchten.

Wenn Sie eine Modellklasse instanziieren, sind für diese keine Beziehungen definiert.Dies lässt sich wie folgt zeigen:

$user = new User();

print_r($user->getRelations());

//Output : empty array

Wie Sie sehen, ist sich das Modell glücklicherweise nicht der Beziehungen bewusst, die es möglicherweise in Beziehungsmethoden deklariert hat oder nicht.Wenn Sie eine Modellbeziehung aufrufen:

$user = new User();

$user->find(1)->roles()->get();

Eloquent legt mithilfe einer Methode die Beziehung zum Modell fest setRelation($relation, $value) das den Namen der aufgerufenen Methode als erstes Argument und die Rückgabe dieser Methode als zweites verwendet.Dadurch wird der Kontext für die Beziehung bereitgestellt, der nicht existiert, bevor Sie ausdrücklich danach fragen.

Ich weiß, das ist nicht das, was Sie zu hören hoffen, aber mit Eloquent ist das nicht möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top