2017-09-20 4 views
1

Ich möchte dynamisch einen Primärschlüssel aus der Abfrage abrufen. Ich habe eine Idee. Zuerst bekomme ich ein Schema von der Abfrage (ich weiß nicht, wie). Nach, ich bin get Tabellenname von Schema:Erhalten Primärschlüssel aus Abfrage in Ecto

Und senden Sie SQL, die der Primärschlüssel bekommen wird. So werden drei Fragen geboren:

  1. Gibt es eine Möglichkeit Schema von Abfrage zu erhalten (und nach dem Tabellennamen bekommen)

  2. Get Tabellennamen direkt aus Abfrage?

  3. Ecto.primary_key() nicht mit Abfragen arbeiten, vielleicht haben sie andere Methoden?

Antwort

2

Wenn die Abfrage mit einem Schema-Modul (dh from(p in Post), nicht from(p in "posts")) gebaut wurde, können Sie das Modul wieder die from Feld der Abfrage:

iex(1)> query = from(p in Post, where: p.id == 1) 
#Ecto.Query<from p in MyApp.Post, where: p.id == 1> 
iex(2)> %{from: {_table, module}} = query 
#Ecto.Query<from p in MyApp.Post, where: p.id == 1> 
iex(3)> module 
MyApp.Post 

Um den Primärschlüssel zu erhalten definiert in das Modul-Schema, können Sie .__schema__(:primary_key) auf dem Modul aufrufen:

iex(4)> module.__schema__(:primary_key) 
[:id] 
Verwandte Themen