エス技研

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


CakePHP4から外部のデータベースにアクセスする方法解説

      2024/08/10

CakePHP4から外部のデータベースにアクセスする方法解説

 
CakePHP4では標準(デフォルト)でデータベースにアクセスする方法が用意されていますが、標準で接続するデータベース以外の、他のシステムのデータベースに接続する方法について解説します。
 
CakePHP4から外部のデータベースにアクセスする方法解説
 
 
他のシステムのデータベースに接続する方法は下記の 2つあります。
 
・CakePHP4 の標準設定をコピペして使用する方法
・MySQL の接続コマンドを利用する方法
 
いずれも簡単な記述で接続できます。
また、接続を確立した後の SQL文の実行はどちらも同じ手続きになります。
 
それぞれ説明をしていきます。
 
 

CakePHP4 の標準設定をコピペして使用する方法

 

データベースへの接続情報を記述・app.php

 
/config/app.php の 285行目付近の「Datasources」にデータベースの接続が記述されています。
この接続情報の中の 340行目付近の「test」の配列をコピペし、下記の 14行目の配列のキーを「sample」のように変更します。
 
複数の単語からなる文字列にする場合は、ローワーキャメルケース(「sampleTestTest」のような 1文字目は小文字のキャメルケース)を使用するようです。
 
また、接続するデータベースの設定に合わせて、「timezone」や「encoding」を変更します。
 

 
 

データベースへの接続情報を記述・app_local.php

 
続けて、/config/app_local.php の 40行目付近から始まる「Datasources」の中にある「test」をコピペして、下記の 11行目の配列のキーを「sample」のように変更します。
 
加えて、接続するデータベースの接続情報を記載します。
(DBの接続情報を「app_local.php」を使わず、「app.php」に直接記述している場合や、「.env」を利用している場合はそれぞれ読み替えて設定をしてください。)
 

 
 

データベースへの接続と SQLの実行

 
データベースの接続を実行する記述方法はシンプルで、下記の記述で接続ができます。
 
ConnectionManager::get()」のパラメータに、前項で指定した「sample」を記述することで接続ができます。
 

 
上記の内容は、SQLを実行するコントローラー内に記述します。
 
 

MySQL の接続コマンドを利用する方法

 

データベースへの接続情報を記述

 
データベースの接続情報を設定します。
 

 
上記の定数は、コントローラ内に記述してもいいですし、下記の記事にあるように、定数ファイルを作成し、そこに記述する方法もあるかと思います。
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
 
 
また、今回はサンプルとして、データベース接続情報を定数として設定していますが、下記の「データベースの接続」のところに直書きしても問題ありません。
 
 

データベースへの接続と SQLの実行

 
続けて、データベースに接続し、SQLを実行する処理が下記となります。
 

 
上記の内容は、SQLを実行するコントローラー内に記述します。
「SQL の SELECT文の実行」の部分の記述は、先に説明した「CakePHP4 の標準設定をコピペして使用する方法」の処理と同一です。
 
 

CakePHP4から外部のデータベースにアクセスする方法の違い

 
この記事では、CakePHP4から外部のデータベースにアクセスする方法が 2つあることを解説しました。
 
・CakePHP4 の標準設定をコピペして使用する方法
・MySQL の接続コマンドを利用する方法
 
上記の 2つのどちらがいいか、は好みの問題だと思います。
 
CakePHP4 Cookbook データベースの基本
https://book.cakephp.org/4/ja/orm/database-basics.html
 
ただ、上記のオフィシャルサイトには「データベース接続を作る一番簡単な方法」として「MySQL の接続コマンドを利用する方法」の方が紹介されています。
 
接続方法としてはどちらもかなり簡単なので、どちらでもいいかと思いますが、開発環境と本番環境でデータベースの接続先を変更するような場合は、「MySQL の接続コマンドを利用する方法」を利用し、データベースの接続先を環境ごとの定数ファイルで管理する方法がより簡単なのかな、と思います。
 
先にも紹介しましたが、環境ごとに定数ファイルを作成する方法については下記の記事を参考にしてください。
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
 
 

データベースの接続情報オブジェクトを利用して SQL文を実行する

 

select文実行の標準形

 
データベースの接続情報を持つオブジェクトを利用し、SQLの実行は下記のように記述を行います。
 

 
 

select文実行・where句はプリペアドステートメントを使用する

 
where句で条件を追加する際は、セキュリティを考慮してプリペアドステートメントを使用します。
 

 
 

select文実行・CakePHPのクリエビルダーを使用する

 
SQL文を書かずに、クリエービルダーを使用することもできます。
 

 
 

Insert文実行の標準形

 
Insertの処理も非常に簡単です。
Insertの SQLを実行してもいいのですが、下記のように記述することで Insertを実行することができます。
 

 
ちなみに、上記の Insertを実行しても自動的に「created」「modified」のカラムを編集する処理はありませんので、必要に応じて「created」「modified」の値を編集しておく必要があります。
 
 

Update文実行の標準形

 
Updateの処理も非常に簡単です。
 

 
上記を SQLに書き直すと下記になります。

 
 

Delete文実行の標準形

 
Deleteの処理も非常に簡単です。
 

 
 

SQL文実行に際しては「try – catch」を利用する

 
SQL文の実行処理は簡単ですが、この記述だけで処理をすると、エラーが発生したときに処理が止まってしまいます。
そのため、プログラムとして実装する場合は「try – catch」を利用してエラーへの対処をしておく必要があるかと思います。
 

 
上記のサンプルは Selectの実行ですが、同様に Insert、Update、Deleteを実行するときも「try – catch」を利用してエラーの対処をするものかと思います。
 
 
また、ログ出力に関しては下記に記事を書いていますので参考にしてください。
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
 

CakePHP4の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法

CakePHP4、CakePHP5でクリエビルダーを利用してテーブルからレコードを取得する際、asを使用してカラムの別名で値を取得したい場合の対応方法を解説。また、別名にはハイフンやアスタリスクなど使用できない文字がある点も解説。

CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応

CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!

CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も

CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。

CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要

CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。

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

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

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

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

CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順

CakePHP3で「1対多」の連携を中間テーブルを利用した「多対多」の連携に変更するときの手順のまとめ。中間テーブルの設定やModelの変更などを間違いやすい箇所を指摘しながらの解説。

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。