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