エス技研

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


CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ

      2019/06/08

CakePHP3でテーブルにカラムを追加したときに変更するポイント

 

システム開発途中でカラムの追加はよくある話

 
CakePHP3でシステムを開発するとき、Bakeを使ってベースとなる処理を作成しておくと作業を効率化することができます。
 
 
ですが、システム開発においては、途中でテーブルにカラムを追加する必要性が生まれることは日常茶飯事です。
 
開発があまり進んでいないときならば、テーブルにカラムを追加して Bakeからやり直す、という方法もありですが、相応に開発が進んでいたら、Bakeからやり直すのは非効率的ですし、バグが混入することにもなりかねません。
 
 
というわけで、テーブルにカラムを追加する前と後とで、Bakeして生成される Controller、Model、Templateファイルがどう変わるのか、を確認して、カラムを追加したときは何を変更すべきなのか、を明確にしていきます。
 
これを見て変更点をチェックすれば、カラムを追加しても抜けもれなく対応できます!
(処理の内容を理解していれば、修正すべき個所は分かるハズではあるんですが...)
 
 

作成するテーブルのサンプル

 
まず、最初に作成したテーブルは下記のとおりです。
 

 
これに対して、下記の ALTER TABLEで削除フラグのカラム「deleted」を追加します。
 

 
 

Bakeで作成されるファイル

 
Bakeを実行して作成されるファイルは、以下となります。
Bakeを再実行する際に「Do you want to overwrite? (y/n/a/q)」との確認があるファイルでもあります。
 
/src/Model/Table/TestsTable.php
/src/Model/Entity/Test.php
/tests/Fixture/TestsFixture.php
/tests/TestCase/Model/Table/TestsTableTest.php
/src/Controller/TestsController.php
/tests/TestCase/Controller/TestsControllerTest.php
/src/Template/Tests/index.ctp
/src/Template/Tests/view.ctp
/src/Template/Tests/add.ctp
/src/Template/Tests/edit.ctp
 
 
更新された内容は以下の通りとなります。
 

/src/Model/Entity/Test.php

 
13行目のコメント行が追加になっています。

 
34行目が追加になっています。

 
 

/src/Model/Table/TestsTable.php

 
74、75行目が追加になっています。

 
 

/src/Template/Tests/index.ctp

 
24行目が追加になっています。

 
37行目が追加になっています。

 
 

/src/Template/Tests/view.ctp

 
38~41行目が追加になっています。

 
 

/src/Template/Tests/add.ctp

 
23行目が追加になっています。

 
 

/src/Template/Tests/edit.ctp

 
29行目が追加になっています。

 
 

/tests/Fixture/TestsFixture.php

 
22行目が追加になっています。

 
42~52行目の、48行目が追加、45、49、50行目が変更になっています。

 
 
テーブルの構造を変更しても、Controllerは変更されていません。
テーブル構造を変更した場合の対応は、Modelの Entityと Tableのファイルでした。
 
Templateも変更がありますが、こちらは、必要に応じて項目を追加するといいでしょう。
 
 

テーブル構造を変更した場合はキャッシュをクリアする

 
テーブルの構造を変更した場合は、キャッシュをクリアしましょう。
 
キャッシュのクリア方法は、CakePHP 3.3以降であれば、下記のコマンドが便利です。

 
詳しくは、「CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う」に記事を書いていますので、参考にしてください。
 
 

関連テーブルがある時、ない時とでの記述内容の違い

 
アソシエーションしたテーブル(関連付けされたテーブル)がある場合は、関連テーブルを createする前に bakeする場合と、createしてから bakeした場合とでも作成されるファイルがやや違うことも確認しました。
 
 
差異があるファイルの内容は、以下の通りです。
 

/src/Template/Tests/add.ctp

 

 
上記の 4、5行目が追加になっています。
これは、「add.ctp」の 17行目、18行目ですが、「Tests」の画面でも「Users」への関連リンクが追加されています。
 
 

 
また、上記の 1行目も下記のように変更されています。
 

 
画面を表示させると分かるのですが、変更前はテキスト形式の入力ボックスなのですが、変更後はプルダウン形式に変更されています。
 
add.ctpと同じ様に、edit.ctp、index.ctp、view.ctpも同じような趣旨の変更が加わっています。
 
 

/src/Model/Entity/Test.php

 
16行目のコメントが下記のように変更になっています。

 
 

/src/Model/Table/TestsTable.php

 
12行目のコメントが下記のように変更になっています。

 
 

/tests/Fixture/TestsFixture.php

 
/tests/Fixture/TestsFixture.php も更新されていましたが、44、47、48行目のデータの値でしたので、ここでの説明は割愛します。
 
 
関連テーブルを作成する前後での違いを検証するつもりはありませんでした。
ですが、「tests」に CakeDC/Usersの user_idと連携させるためのカラムがあることを忘れていて、「tests」だけで Bakeをしてしまったため、「『user_id』に関連するテーブルがない」というエラーが表示されてしまいました。
 
そのため、ついでに確認をしてみることにした次第です。
 
 

CakePHP3の関連記事

CakePHP3で環境変数を設定して本番環境と開発環境を分けて処理をする場合
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法

アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。

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

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

CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用

CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。

CakePHP 2.3 ログイン、操作履歴、アクセスログ出力

CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。

CakePHP 2.3でOn Duplicate Key構文を実装

CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。

CakePHPを学ぶ際にはオブジェクト指向を学ぼう

CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」

CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。

CakePHP 2.3でファイルのアップロード処理を作る

CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。