ぽかぽかウンティの学習帳

ぽかぽか飼育園から投稿します。

symfony propel:build-○○ task でハマった

一つは default: CURRENT_TIMESTAMP


一つは DB 違いで同一名のテーブルがあった場合の propel:build-filters と propel:build-forms


前者は propel:build-schema で生成された schema.yml 設定中に default: CURRENT_TIMESTAMP があると、propel:build-model タスクが死ぬ問題。


内部の再帰処理やメモリ使用量が暴走してビルドできなかった。その場合は default 設定を消すこと。聞くところによると MySQL 使ってる場合は常識らしい。。


後者はタスクの中の処理で、model 内の *TableMap.php をすべて読み込んでテーブル名をキーにして配列化するため、複数DB・複数スキーマのモデルが存在する場合に、DBをまたいで同じ名前のテーブルがあると、最初に読み込んだスキーマのテーブル情報だけが残ってしまうことに因る。


外部キー参照設定などでカラム存在判定をする箇所で、意図しない方のテーブルのカラムを見て「ない」とかエラーを吐く事象だった。


こちらは、propel.ini などの設定で変えられそうになく、アプリケーションの Configuration.php で getModelDirs() をオーバーライドし、


読み込むモデルをタスクのオプションで渡される --connection="hogehoge" フォルダ以下に限定するよう、filters と forms の書き換えタスクをつくらざるを得なかった。