昨日に引き続き Phalcon Developer Toolsの話で,user_table
みたいなテーブル名にアンダーバーを含んだテーブルを扱おうとしてかなりはまったのでまとめておく.結論としては Phalcon ではアンダーバーを無視する仕様とのこと.
まずは phalcon model してみる
Phalcon Developer Tools — Phalcon 1.2.4 documentation #Getting Available Commands
Phalcon Developer Tools — Phalcon 1.2.4 documentation #Generating Models
その前に,Phalcon コマンドのリストがマニュアルと異なっているので,そこから紹介しておくと,create-model
のエイリアスで model
が用意されてるし,オプション --table-name
はもうなくて --name
に変更されてるけど,別にオプション指定じゃなくても良いので,特に使わないはず.
$ phalcon commands Phalcon DevTools (1.2.4) Available commands: commands (alias of: list, enumerate) controller (alias of: create-controller) model (alias of: create-model) all-models (alias of: create-all-models) project (alias of: create-project) scaffold migration webtools
ということで,改めて phalcon model をしてみる.
$ phalcon model user_table Phalcon DevTools (1.2.4) Success: Model "user_table" was successfully created.
どうなったかと言うと,アンダーバーは無視されて user_table
から UserTable.php
が自動生成される.
$ ls -1 app/models UserTable.php
PHQL で簡単なクエリを投げてみる
Working with Models — Phalcon 1.2.4 documentation
Phalcon Query Language (PHQL) — Phalcon 1.2.4 documentation
動作確認のため ORM じゃなく,あえて PHQL で簡単なクエリを投げてみた.
こんな感じで書いてみると,user_table
がロードできないというエラーが出てしまう.
require dirname(__DIR__) . '/models/UserTable.php'; (中略) $query = $this->di->get("modelsManager")->createQuery("select * from user_table"); $users = $query->execute(); foreach ($user as $users) { echo $user->id; }
Phalcon\Mvc\Model\Exception: Model 'user_table' could not be loaded
解決策はこうで,PHQL でもアンダーバーを無視したテーブル名で参照する必要がある.ようするに from usertable
となる.でもこれだと単独のSQLとしては使えず,テーブルが存在しないとかそういうエラーが出る.障害時とか急いでるときほどソースを読んで解析したりするので,これじゃ微妙だなー.テーブル名にアンダーバー使うのやめようかなー.どうしようかなーって感じ.
require dirname(__DIR__) . '/models/UserTable.php'; (中略) $query = $this->di->get("modelsManager")->createQuery("select * from usertable"); $users = $query->execute(); foreach ($user as $users) { echo $user->id; }
Phalcon 的には "It's the convention." とのこと
まさに同じ議論が GitHub の issue で行われていて,この挙動はバグではなく仕様とのこと.ということで,この人が提案してる通り,まずはマニュアルに書いておいて欲しいというのに同意.ただ Phalcon のマニュアルって充実してるのと同時にかなり膨大で複雑なので全体を把握するのが結構大変なイメージがある.
[ BUG ] Models with underscores · Issue #963 · phalcon/cphalcon · GitHub
Mention how Models get mapped to tables · Issue #143 · phalcon/docs · GitHub
まとめ
Phalcon 初心者なこともあって結構はまった.まったくもー.
関連エントリー
phalcon model すると Database configuration cannot be loaded ってエラーが出る - kakakakakku blog