エス技研

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


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

      2018/08/08

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の関連記事

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。

CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3で値を入力直後にバリデーションする方法解説

CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。

CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説

入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。

CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法

CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP3でファイルのアップロード処理を自作・解説付き・その1
CakePHP3でファイルのアップロード処理を自作・解説付き・その1

CakePHP3でファイルをアップロードする処理を、php.netにある「エラーを起こさない」と説明がある処理を参考に作成。サンプルソースとその解説付きで、コピペでも動くし、カスタマイズも簡単!

CakePHP 2.x系 Viewでのコメントの記述方法など

CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法

CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合

ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。