AppController内で特定のmodelにアクセス

Cakephpの共通処理レイヤーでもモデルに接続したい

Cakephpにはシステム内で共通の処理を記述できる場所としてAppController.phpというファイルがある。1.2系の場合は、app_controller.phpというファイルが共通処理を記述するファイルになる。

共通処理の際にモデルに接続する方法は以下のような方法で対応できる。

$SHOP = ClassRegistry::init('Shop');
$shop_info = $SHOP->findByEmail($email);

Shopモデルを読み込んでemailカラムに対するfindで該当データを取得する例です。

モデルを読み込んでしまえば、通常のfindやsaveと同様にコードを記述できます。以下の例は特定の行をidカラムで指定した上で、statusカラムのみにアップデートをかけています。

$PRODUCT = ClassRegistry::init('Product');
$PRODUCT->id = $id;
$PRODUCT->saveField('status', '3');

ClassRegistry::initを活用すれば、AppController内であっても動的に操作するモデルを切り替えてデータベースを操作することが可能です。

Cakephpのプラグイン内のモデルに接続する場合は以下のようになります。

$PLUGIN_MODEL = ClassRegistry::init('Plugin.Model');
$data = $PLUGIN_MODEL->findById($id);

Webエンジニアブログにコメント

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

AppController内で特定のmodelにアクセスの記事にコメントを投稿