Die grundlegende Eigenschaft eines ORM sagt normalerweise, da die DB-Migration von einer Datenbank zu einer anderen leicht möglich ist. Hier habe ich anfangs die MySQL-Datenbank für mein Projekt verwendet und plane, diese nach PostgreSQL zu migrieren. Bei der Migration funktioniert es fast alle einfachen Abfragen mit Select * aus der Tabelle, Einfügen von Updates etc.Laravel elequent ORM funktioniert nicht, wenn von mysql nach postgresql migriert wird
Aber wenn ich durch die einige datediff
Funktion in MySQL komme, das ORM schafft keine entsprechenden Abfragen in PostgreSQL.
Hier ist meine Abfrage
$result = DB::table('sales_target')
->select(db::raw('DATEDIFF(end_date,start_date) as DaysInQuarter'))
->whereraw("sales_target.target_quarter=$currentQuarter AND sales_target.target_year=$currentYear and status=1")
->first();
Ich frage mich, ob ich die Abfrage in vollständig ORM Struktur geschrieben haben, oder nicht. Bitte helfen Sie mir dabei.
Edit 1
n kurz ich will mir jemand sagen, wie ich diese Abfrage
DB::table('sales_target')
->select(db::raw("DATEDIFF(end_date,start_date) AS DaysInQuarter"))
->first();
schreiben kann, die in beiden mysql und postgresl mit ORM funktionieren sollen.
In Mysql funktioniert es richtig, aber in Postgresql ist es nicht.
Ich erhalte eine Fehlermeldung wie diese
No function matches the given name and argument types. You might need to add explicit type casts. (SQL: select DATEDIFF(end_date,start_date) AS DaysInQuarter from "sales_target" limit 1)
Ist nicht Abfrage-Generator auch auf eloquent basiert? Sind ihre Funktionen nicht austauschbar (ich kann jede DB-Funktion in einer eloquenten Frage verwenden)? Ich stimme zu, dass Db :: Raw in keiner Weise ORM Bitte beachten Sie, dass ich gerade im Lernmodus bin, wenn ich das frage :) – Radu
Nein, Eloquent verwendet Abfrage-Generator, aber Abfrage-Generator verwendet nicht Eloquent. In oben verwenden Sie Query Builder, weil Sie mit 'DB :: table ('sales_target') beginnen' - wenn Sie mit Ihrem Modell 'SalesTarget' begonnen haben, dann würden Sie Eloquent verwenden –
Danke, mein Herr! – Radu