編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

JOIN

$c = new Criteria();
$c->add(GoodsPeer::ID, 123);
$c->addJoin(GoodsPeer::CATEGORY_ID, CategoryPeer::ID, Criteria::INNER_JOIN);
                                   
$rows = GoodsPeer::doSelectDetail($c, $this->con);
  • 以上のようにaddJoin()でJOINを含んだSQLを発行出来るが、リレーションしているテーブル(この場合categoryテーブル)のカラムを参照出来ない。
  • よって、GoodsPeerクラスにdoSelectDetail()メソッドを追加し、JOINする場合はこのメソッドを使うようにする。
 class GoodsPeer extends BaseGoodsPeer
 {
    public static function doSelectDetail($criteria, $con = null) {
        parent::addSelectColumns($criteria);
        
        $criteria->addSelectColumn(CategoryPeer::CATEGORY_NAME);

       return GoodsPeer::populateDetailObjects(GoodsPeer::doSelectStmt($criteria, $con));
    }
 
    public static function populateDetailObjects($stmt) {
        $results = array();
 
        $class = GoodsPeer::getOMClass();
        $class = Propel::importClass($class);
        $classDetail = $class."Detail";
        while($row = $stmt->fetch(PDO::FETCH_NUM)) {
            $obj = new $classDetail();
            $obj->hydrate($row);
        }              
                        
        return $obj;
    }
 }
  • 以上がGoodsPeerクラス。
  • doSelectDetail()メソッド内でdoSelectStmt()を実行し、結果をpopulateDetailObjects()に渡す。
  • populateDetailObjects()で新しいクラスを作成し、そのインスタンスにhydrate()で値をポピュレートしている。

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-08-16 (火) 18:28:40 (2347d)