Jobeet 6日目 モデルの詳細

こりずに6日目です。Doctrineに切り替えました。

モデルの詳細

Doctrineにまだ慣れてないのでまとめたい。
6日目はモデルに得に触れているので抑えておきたいところ。

…しかし、Propelと違って、Doctrineのクエリの作り方にはいろいろメソッドがあるようで。

後で確認できるようにとりあえずjobeetにならって以下のようなものを作りました。

actionで全件取得の場合

CRUD作ったときのデフォルト。actionでリストとってる

<?php
// actions.class.php
// select * from jobeet_job;
public function executeIndex(sfWebRequest $request)
  {
    $this->jobeet_job_list = Doctrine::getTable('JobeetJob')
      ->createQuery('a')
      ->execute();
  }
?>

上記とちょっと違う方法(getTable()を使わない)

<?php
// actions.class.php
// select * from jobeet_job;
public function executeIndex(sfWebRequest $request)
  {
    $q = Doctrine_Query::create()
      ->from('JobeetJob j')

    $this->jobeet_job_list = $q->execute();
  }

モデルに移行した場合

<?php 
// actions.class.php
// select * from jobeet_job where expires_at > 現在時刻;
public function executeIndex(sfWebRequest $request)
 {
   $this->jobeet_job_list = Doctrine::getTable('JobeetJob')
                            ->getActiveJobs();
 }

?>
<?php
// lib/model/doctrine/JobeetJobTable.class.php
public function getActiveJobs()
  {
    $q = $this->createQuery('j')->where('expires_at > ?', date('Y-m-d h:i:s', time()));

    return $q->execute();

  }
?>

JOINした場合

<?php
// actions.class.php
// select * from jobeet_job as j, jobeet_category as c where j.category_id = c.id and j.expires_at > 現在時刻;
public function executeIndex(sfWebRequest $request)
{
  $this->categories = Doctrine::getTable('JobeetCategory')->getWithJobs();
}
?>
<?php
// lib/model/doctrine/JobeetCategoryTable.class.php
  public function getWithJobs()
  {
    $q = $this->createQuery('c')
      ->leftJoin('c.JobeetJobs j')
      ->where('j.expires_at > ?', date('Y-m-d h:i:s', time()));

    return $q->execute();
  }

?>

ひとまずはDoctrineの簡単な扱い方を勉強することができました。

where句にはいろいろあるみたいですね。find()とか。
7日目以降、まだまだでてきそう。