複数のステートメントを含む複雑な MySQL クエリを Laravel Eloquent に変換する方法

Mary-Kate Olsen
リリース: 2024-10-26 06:49:30
オリジナル
400 人が閲覧しました

How to Convert Complex MySQL Queries with Multiple Statements to Laravel Eloquent?

複数のステートメントを含む複雑な MySQL クエリを Laravel Eloquent に変換する

データベース クエリの世界では、複雑な SQL クエリを Laravel Eloquent に変換する機能が重要です。このような課題の 1 つは、PREPARE、EXECUTE、DEALLOCATE などの一連のステートメントを含む複数ステートメントの MySQL クエリを処理するときに発生します。

問題ステートメント

複数のステートメントを含む MySQL クエリ:

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;
ログイン後にコピー

この複雑なクエリを Laravel Eloquent に変換しようとしていますが、関連する複数のステートメントを処理する方法がわかりません。

解決策

ステートメントの準備や実行など、MySQL クエリの一部の側面は Eloquent に直接変換できませんが、コア機能は実現できます。解決策は次のとおりです:

<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>
ログイン後にコピー

説明

このソリューションは、Eloquent クエリと生の SQL クエリを組み合わせたものです。

  • DB:: table('item_details')->selectRaw('GROUP_CONCAT(...) INTO @sql')->get();最初のステートメントを実行し、@sql という名前の一時 SQL 変数を作成します。
  • $sql = DB::selectOne('select @sql')->{'@sql'}; @sql 変数の値を取得し、$sql 変数に保存します。
  • ItemDetails::select('item_number', DB::raw('SUM(quantity) as total_quantity'))-> selectRaw($sql)->groupBy('item_number')->get();メインの Eloquent クエリを構築します。 selectRaw($sql) を使用して、$sql から取得した動的 SQL 文字列を挿入します。

このアプローチにより、Laravel Eloquent のコンテキスト内で複雑な MySQL クエリを実行できるようになり、コードが簡素化され、保守性が維持されます。 .

以上が複数のステートメントを含む複雑な MySQL クエリを Laravel Eloquent に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!