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日目以降、まだまだでてきそう。