エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3で生の SQLの実行はConnectionManagerを使う

      2019/03/02

CakePHP3でクリエビルダーを使わず生の SQL文を実行する方法を解説

 

CakePHP3で生の SQL文を実行する方法を解説

 
CakePHP3で直接 SQL文を実行する方法を解説します。
 
【参考サイト】CookBook データベースの基本
https://book.cakephp.org/3.0/ja/orm/database-basics.html
 
CakePHP3において、直接 SQL文を実行する方法は、上記の CakePHP3の Cookbookにも書いてあるのですが、非常に簡単で、データベースにアクセスする方法としては基本形のようです。
 
 
ただ、CakePHP3のようなフレームワークを使う理由は、SQL文を作成しなくても簡単にデータベースにアクセスできるから、といったこともあるワケですが、より簡単にアクセスするには、クエリービルダーを利用します。
 
【参考サイト】CookBook クエリービルダー
https://book.cakephp.org/3.0/ja/orm/database-basics.html
 
 
今回の記事は、クエリービルダーでは対応できないデータベースへのアクセスを、SQL文を作成して対応する方法を解説します。
 


 

CakePHP3で生の SQL文を実行する方法・基本形

 
生の SQL文を実行する方法は、以下のようになります。
 

 
クリエービルダーを使ってデータベースにアクセスするときは「use Cake\ORM\TableRegistry;」を使いますが、生の SQL文を実行するときは「use Cake\Datasource\ConnectionManager;」を記述します。
 
 
ConnectionManager::get('default');」の「default」は、データベース名、テーブル名などではないことには注意が必要です。
 
この「default」は、データベースの接続設定です。
 
「/config/app.php」にデータベースに関する設定項目として「Datasources」があり、その中で「default」「test」の設定を記述しているかと思います。
 
この「default」を使います、という指定です。
 
逆に言うと、1つの処理の流れの中で、「default」で設定しているデータベースではないデータベースに接続して処理をしたい場合には、「default」とは違うデータベースへの接続設定を作成し、この「ConnectionManager」を利用して接続できます。
 
 

CakePHP3で生の SQL文を実行する方法・INSERT文、UPDATE文、DELETE文

 
前項で紹介したのは SELECT文ですが、INSERT文、UPDATE文、DELETE文でも同じです。
 
INSERT文の場合は下記の様になります。
 

 
上記と同じように SQL文を UPDATE文、DELETE文に変えることでその処理を実行することができます。
 
 

CakePHP3で生の SQL文を実行する方法・プリペアードステートメントを利用する方法

 
続いて、プリペアードステートメントを使って SQL文の処理を行う場合の解説を行います。
 
前項で解説した、INSERT文をプリペアードステートメントを用いて書き直すと下記の様になります。
 

 
上記のソース中にコメントを書いていますので問題ないかと思いますが、SQL文と値となる配列を別々に作成し、「$connection->execute()」の引数として記述するだけです。
 


 

CakePHP3で Insert On Duplicate Key Update構文を利用する

 
今回、私が生の SQL文を実行する必要があった理由は、Insert On Duplicate Key Update構文を使用するためでした。
 
CakePHP3ではクリエビルダーを使って Insert On Duplicate Key Update構文を実行する方法が分からず、生の SQL文を書いて Insert On Duplicate Key Update構文を実行しようとしたため、今回の生の SQL文を実行する方法が必要でした。
 
Insert On Duplicate Key Update構文を、プリペアードステートメントを利用して実行しようとすると、下記の様になります。
 

 
 
CakePHP2で開発しているときも同じ必要性があったのですが、その時も生の SQL文を実行する方法で対処しています。
その時に書いた記事が下記にあります。
 
Insert On Duplicate Key Update構文の使い方
CakePHP 2.3でOn Duplicate Key構文を実装
 
 

SQL文を実行したときのエラーログを取得する方法

 
今回の記事の趣旨とは違いますが、CakePHP3で SQL文を実行してエラーになったとき、どのようなエラーなのかを確認するため、エラーログを取得する場合は下記のような記述を行います。
 

 
詳しい使い方は「CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説」に記事を書いていますので、そちらも参照してください。
 
 

CakePHP3の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説

CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法

CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。

CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。

CakePHP3でDocumentRootやtmp、webroot、logsなどのフォルダへのパスの定数
CakePHP3でDocumentRootやtmp、webroot、logsなどのフォルダへのパスの定数

CakePHP3で特定フォルダのパスの定数を解説。root、DocumentRoot、app、config、webroot、tests、tmp、cache、vendor、コア、コアの srcが設定済み。realpath()関数を使うと柔軟なパス指定が可能。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。

CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。

CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する

CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。

CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」
CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」

CakePHPでQRコードを生成するライブラリ「cakePHP-QR-Code-Helper」の紹介。GDライブラリのインストールも必要ないHelperとして提供されているため、ファイルを設置すればすぐに使用可能。