In der Welt der Datenbankabfragen ist die Fähigkeit, komplexe SQL-Abfragen in ihre Laravel Eloquent-Gegenstücke zu konvertieren, von entscheidender Bedeutung. Eine solche Herausforderung entsteht beim Umgang mit MySQL-Abfragen mit mehreren Anweisungen, die eine Reihe von Anweisungen wie PREPARE, EXECUTE und DEALLOCATE umfassen.
Problemstellung
Sie haben eine MySQL-Abfrage mit mehreren Anweisungen:
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'ifnull(SUM(case when location_code = ''', location_code , ''' then quantity end),0) AS `', location_code , '`' ) ) INTO @sql FROM item_details; SET @sql = CONCAT('SELECT item_number,SUM(quantity) as "total_quantity", ', @sql, ' FROM item_details GROUP BY item_number'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Sie möchten diese komplexe Abfrage in Laravel Eloquent konvertieren, sind sich aber nicht sicher, wie Sie mit den mehreren Anweisungen umgehen sollen.
Lösung
Während einige Aspekte der MySQL-Abfrage, wie die Vorbereitung und Ausführung der Anweisung, nicht direkt in Eloquent übersetzbar sind, kann die Kernfunktionalität erreicht werden. Hier ist eine Lösung:
<code class="php">DB::table('item_details') ->selectRaw('GROUP_CONCAT(...) INTO @sql') ->get(); $sql = DB::selectOne('select @sql') ->{'@sql'}; ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity')) ->selectRaw($sql) ->groupBy('item_number') ->get();</code>
Erklärung
Diese Lösung ist eine Mischung aus eloquenten und unformatierten SQL-Abfragen.
Dieser Ansatz ermöglicht es Ihnen, die komplexe MySQL-Abfrage im Kontext von Laravel Eloquent auszuführen, wodurch Ihr Code vereinfacht und die Wartbarkeit erhalten bleibt .
Das obige ist der detaillierte Inhalt vonWie konvertiert man komplexe MySQL-Abfragen mit mehreren Anweisungen in Laravel Eloquent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!