symfony1.2でDoctrine1.1使ってJobeetチュートリアル6日目
Debugging Doctrine generated SQL
Doctrineが作ったSQLは、そのままじゃ実行できないよ。
phpMyAdminとかで、SQLのデバッグしたいときに一手間必要。
デバッグツールバーのボンレスハムみたいなボタン押すと、Doctrineが作ったSQLが見られる。
SELECT j.id AS j__id, j.category_id AS j__category_id, j.type AS j__type, j.company AS j__company, j.logo AS j__logo, j.url AS j__url, j.position AS j__position, j.location AS j__location, j.description AS j__description, j.how_to_apply AS j__how_to_apply, j.token AS j__token, j.is_public AS j__is_public, j.is_activated AS j__is_activated, j.email AS j__email, j.expires_at AS j__expires_at, j.created_at AS j__created_at, j.updated_at AS j__updated_at FROM jobeet_job j WHERE j.expires_at > ? - (2008-11-15 01:51:39 )
WHERE文が文法エラーで引っかかるんで
SELECT j.id AS j__id, j.category_id AS j__category_id, j.type AS j__type, j.company AS j__company, j.logo AS j__logo, j.url AS j__url, j.position AS j__position, j.location AS j__location, j.description AS j__description, j.how_to_apply AS j__how_to_apply, j.token AS j__token, j.is_public AS j__is_public, j.is_activated AS j__is_activated, j.email AS j__email, j.expires_at AS j__expires_at, j.created_at AS j__created_at, j.updated_at AS j__updated_at FROM jobeet_job j WHERE j.expires_at > '2008-11-15 01:51:39'
と変更すれば、通る。
ただ、既存のexpires_atが古すぎて一件もヒットしないorz
data/fixtures/jobs.yml開いて、expires_atを来年の日付とかにしとくと良い。
Categories on the Homepage
Unknown relation alias JobeetJobって言われた。
class JobeetCategoryTable extends Doctrine_Table { public function getWithJobs() { $q = $this->createQuery('c') ->leftJoin('c.JobeetJob j') ->where('j.expires_at > ?', date('Y-m-d h:i:s', time())); return $q->execute(); } }
leftJoinでリレーションテーブル結合するときのテーブル名が間違ってる。
leftJoin('c.JobeetJobs j')
JobeetJobsだ!
config/doctrine/schema.yml
のrelations:参照
フォーラムに同様の投稿があったので、貼っときます。
http://www.symfony-project.org/forum/index.php/t/17558/
Dynamic Fixtures
data/fixtures/020_jobs.yml
ってファイル作って
symfony doctrine:data-load
しても、DBにカラムが増えなかったので、
data/fixtures/jobs.yml
の末尾に、phpでfor文回してるとこ追加して
symfony doctrine:data-load
したら、期待通りになった。
jobs.yml
JobeetJob: job_sensio_labs: JobeetCategory: programming type: full-time company: Sensio Labs logo: /uploads/jobs/sensio_labs.png url: http://www.sensiolabs.com/ position: Web Developer location: Paris, France description: | You've already developed websites with symfony and you want to work with Open-Source technologies. You have a minimum of 3 years experience in web development with PHP or Java and you wish to participate to development of Web 2.0 sites using the best frameworks available. how_to_apply: | Send your resume to fabien.potencier [at] sensio.com is_public: true is_activated: true token: job_sensio_labs email: job@example.com expires_at: '2009-01-01' 中略 <?php for ($i = 100; $i <= 130; $i++): ?> job_<?php echo $i ?>: JobeetCategory: programming company: Company <?php echo $i."\n" ?> position: Web Developer location: Paris, France description: Lorem ipsum dolor sit amet, consectetur adipisicing elit. how_to_apply: | Send your resume to lorem.ipsum [at] company_<?php echo $i ?>.sit is_public: true is_activated: true token: job_<?php echo $i."\n" ?> email: job@example.com <?php endfor; ?>
// (゚⊿゚)イラネ rm data/fixtures/020_jobs.yml