Laravel Eloquent 提供了一种优雅的机制来使用富有表现力的 PHP 代码执行 SQL 查询。然而,转换复杂的多语句 MySQL 查询可能会令人生畏。本文将指导您将此类查询转换为 Eloquent,特别是解决 PREPARE、EXECUTE、SET 和 DEALLOCATE 等语句带来的挑战。
要转换提供的 MySQL 查询,我们将主要在 Eloquent 中使用原始查询。细分如下:
DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get(); DB::statement('SET @sql = CONCAT(...)'); DB::statement('PREPARE stmt FROM @sql'); DB::statement('EXECUTE stmt'); DB::statement('DEALLOCATE PREPARE stmt');
将这些转换为 Eloquent 代码,我们得到:
$result = DB::table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get(); $sql = DB::selectOne('select @sql')->{'@sql'}; $results = ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))->selectRaw($sql)->groupBy('item_number')->get();
这种方法采用一系列原始查询来实现所需的结果。初始查询将所需的 SQL 连接到用户变量 @sql 中。随后,PHP 使用单独的查询检索该变量,然后构造一个 Eloquent 查询来执行最终的 SQL 语句,其中包括连接的 SQL。
以上是如何将包含 PREPARE、EXECUTE 和 DEALLOCATE 的复杂 MySQL 语句转换为 Laravel Eloquent?的详细内容。更多信息请关注PHP中文网其他相关文章!