CakePHP3でColumn not found: 1054 Unknown columnエラーが発生した原因と対処

背景
CakePHP3でTableクラスで期待しているカラム名とMySQLのカラム名に差異があった。
そこでMySQL側のカラム名の修正をした。
しかし、Column not found: 1054 Unknown columnエラーが発生した。

原因
Tableクラスで期待しているカラム名とMySQLのカラム名は合わせていた。
しかし、cake_project/tmp/cache/modelsディレクトリ以下にあるmyapp_cake_model_default_table_nameの中身を見ると古いカラム名のままだった。

対処内容
cake_project/tmp/cache/modelsディレクトリ以下にあるmyapp_cake_model_default_table_nameのファイルを削除した。

※上記のパスの「cake_project」はCakePHP3プロジェクトのルートディレクトリ、「table_name」はMySQLのテーブル名。

MySQLでカラム名を変更しようとしたらERROR 1067 (42000): Invalid default value for ‘column_name’メッセージが出力された

MySQLでカラム名を変更しようとしたらERROR 1067 (42000): Invalid default value for ‘column_name’メッセージが出力された。

原因
エラーの出力されたカラムはDATETIME型でデフォルト値が0000-00-00 00:00:00になっていた。
MySQLのsql_modeにNO_ZERO_IN_DATE、NO_ZERO_DATEが含まれていたためエラーとなっていた。

show variables like 'sql_mode' ;
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+

対処内容
/etc/my.cnfの中にNO_ZERO_IN_DATE、NO_ZERO_DATEを除いてsql_modeの追加をする。

[mysqld]
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

/etc/my.cnfを追加したあとにMySQLを再起動する。

systemctl restart mysqld.service

環境
CentOS 7
MySQL 5.7.22

redmineを導入して改善したこと

redmineを導入して改善したことを残しておきます。

  • 元々の経緯
  • システム開発のバグ管理表をエクセルで管理をしていたが問題点があった。
    もっと簡単にバグ管理を行いたかった。

  • 以前までの状態
  • バグをエクセルファイルに登録、編集、削除をしていた。
    エクセルファイルはSubversionで共有、管理をしていた。
    1シートで管理をしていた。
    エクセルファイルを使う人はだいたい5人前後。

  • エクセルファイル+Subversionのときの問題点
  • 誰かが記入をしてsvn commitをするまで更新ができない。
    案件ごとにファイルが別になっているので過去の情報の検索がファイルを開かないとわからない。
    1セルに長文を書くと読みにくい。短いと意図が伝わりにくい。
    ソースコードの指摘をするときに書きにくい、読みにくい。
    バグ票の記載に関する追記事項がでてきて追加をすると、読みにくい。

  • redmineにしてから改善したこと
  • 他の人の更新を待たずに済むようになった(同じチケットを更新すると競合することはある)。
    標準で検索機能があるので検索が容易になった。
    1チケットずつの詳細表示画面があるので長文を書いても大丈夫になった。
    コードハイライト機能があるのでソースコードを記入しても読みやすくなった。
    注記によって質問と回答などのやりとりができるようになった。

  • redmineにしても残る課題
  • 入力項目をきちんと記入しないで空欄のままになってしまう。

他にも感じることがあれば追加していく。

Qiitaのいいなと思った記事

Qiitaのアカウントは持っていないのでいいなと思った記事をここにストックしておく。
※問題があれば削除する。

ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】

個人のためのコードレビューサービスを開発しました。

CodeanywhereでMySQLにアクセスする方法

CodeanywhereでMySQLにアクセスする方法は(私が知っているもので)2つある。

・ブラウザでCodeanywhereのSSH Terminalからアクセスする
Codeanywhereの左メニューからConnectionの上(画像ではcakeがConnection名)で右クリックしてSSH Terminalを選択する。
SSH Terminal上で「mysql -u root」コマンドを実行することでMySQLにアクセスができる。

2018-04-04_Codeanywhere-002

・phpMyAdminからアクセスする
Codeanywhereの左メニューからConnectionの上で右クリックしてInfoを選択する。
Connectionに付けた名前のタブが開き、「To access phpMyAdmin on your Container use the following link:」にphpMyAdminのURLが書いてあるのでコピーをする。
ブラウザからURLにアクセスをするとphpMyAdminにアクセスできる。
ユーザ名はroot、パスワードは空でMySQLにアクセスができる。

2018-04-04_Codeanywhere-003

CodeanywhereでSSH Terminalがみつからなくて時間をとられた

CodeanywhereでSSH Terminalがみつからなかった。
ドキュメントも読んだけれどわからずYou Tubeの動画を見ていたらわかった。

ドキュメントではコネクションの上で右クリックしてSSH terminalが選べると書いてある。

Simply right click on your connection with SSH access and select SSH terminal.

Conectionsを右クリックしてもSSH Terminalは出てこない。

2018-04-04_Codeanywhere-001

Connectionsの下のConnection(画像の場合はcake)を右クリックすると出てきた。
恥ずかしながらこれを解決するのにその日には終わらなかった。

2018-04-04_Codeanywhere-002