質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

5200閲覧

Laravel DBクエリビルダでのINSERT文につきまして。複数の値を同時に挿入したい場合

yowayowanitohei

総合スコア31

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/04/05 06:28

編集2021/04/05 06:33

Laravelのクエリビルダにて直接INSERTの sqlを実行し値を追加したいですが
複数のあたいを1回のSQLで挿入する方法がよく分からず困っています。

現在は以下のようなコードになっています。

foreach($Categorylist as $val){ $CategorySet = explode(",", $val); DB::connection('pgsql2') ->insert('insert into ssid_categories (category1, category2) values (?, ?)', [$CategorySet[1],$CategorySet[2]]); }

今までは数個程度の値を挿入で済んでいたためこのような形になっていますが、
数千件の挿入でも問題ないように修正したいと考えております。
極力直接 sql指定で実行したいです。
この場合複数の行を指定する方法についてご情報の提供をお願いしてもよろしいでしょうか。

すみませんがどうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バルクインサートを使えばいけるはずですが、Laravelの場合はバルクインサートに癖があります。

laravel bulk insertで気をつけること

なので、foreachでひたすらSQL構文とプレースホルダに代入する値を生成して、ループの外側でinsertメソッドを実行したらいけるのではと思います。

PHP

1$ary_placeholder = []; 2$ary_value = []; 3foreach($Categorylist as $val){ 4 $ary_placeholder[] = " (?, ?)"; 5 $ary_value[] = $val[0]; //第一引数 6 $ary_value[] = $val[1]; //第二引数 7} 8 9$bar_placeholder = implode(",",$ary_placeholder); 10 11 DB::connection('pgsql2') 12 ->insert('insert into ssid_categories (category1, category2) values {$bar_placeholder}", 13 $ary_value); 14

要は

insert("insert into hogehoge values(?,?),(?,?),(?,?)",["A1","A2","B1","B2","C1","C2"]);

となるように組んでいくので、どっちが文字列に修正する必要があって、どっちが配列のままで制御するかを見極めれば簡単にSQLを作れると思います。

投稿2021/04/05 06:43

編集2021/04/05 06:48
FKM

総合スコア3647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yowayowanitohei

2021/04/05 07:19

FKMさん いつもご回答ありがとうございます。 >どこが文字列でどこが配列のままで制御するかを見極めれば簡単 確かにその部分が混乱していました。。。 毎回わかりやすいご解説ありがとうございます。 質問のため簡略化したINSERTだったのですが、なんとか今のシステムに落とし込み動かすことができました! またご機会がございましたら今後ともどうぞよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問