Lassen Sie mich sagen, ich habe ein User
Modell, das has_many
Post
.Wie kann ich die Assoziation vorladen und sie in ecto zurückgeben?
holte ich einen Benutzer:
user = Repo.get(User, 1)
und jetzt will ich alle Beiträge für diesen Benutzer bekommen. Die einzige Lösung, die ich gefunden habe, ist:
posts = Repo.preload(user, :posts).posts
Aber es ist hässlich. Gibt es dafür eine Abkürzung?
Was ist der Unterschied zwischen 'assoc' und' preload'? – arpit
'assoc' erstellt eine Abfrage für bestimmte Assoziationen, ohne Daten von db abzurufen,' preload' ruft Daten von db für die Assoziation einschließlich verschachtelter Assoziationen ab. – Voldy
Beachten Sie, dass 'preload/2' sowohl den übergeordneten Datensatz (Benutzer in diesem Fall) als auch die zugehörigen Datensätze (Posts) in einer Datenstruktur zurückgibt, während' assoc/2' piped zu 'Repo.all' nur die zugehörigen Datensätze zurückgibt (Beiträge). Das heißt, wenn Sie den übergeordneten Datensatz benötigen, können Sie ihn separat abrufen (wie im obigen Beispiel), aber Sie erhalten diese Daten nicht, wenn Sie ihn vollständig als Pipe-Anweisungen schreiben. – tomf