Doctrineを利用して実際の処理をしてみるの

( Doctrine )

Doctrineいれてみる with zendからの続きです。

では実際にDoctrineで生成されたクラスを利用して データベースの操作を行ってみましょう。

ユーザデータ一覧取得

            // user
             $query = Doctrine_Query::create()
                     ->from('User u')
                     ->orderBy('u.id')
                           ;
            $lists = $query->execute();

ユーザデータ作成

            // user
            $user = new User();
            $user->username = "username"
            $user->password = "password"
            $user->save();

ユーザデータ削除

            //$user = new User();
            $query = Doctrine_Query::create()
                                    ->delete("User u")
                                    ->whereIn("id", $prms["delid"]);
            $delcnt = $query->execute();

ユーザデータ変更

            // user
            $user = Doctrine::getTable('User')->find(1);
            
            $user->username = "modified_username"
            $user->password = "modified_password"
            $user->save();

ちょっと応用してみます。 情報取得時にテーブルをJOINして取得します。

            // user and group
            $query = Doctrine_Query::create()
                     ->from('User u')
                     ->leftJoin('u.Group g')
                     ->orderBy('u.id')
                           ;
            $lists = $query->execute();
            $this->view->lists = $lists;

上記処理は、Doctrine独自の書き方でDoctrine側であらかじめ関連づけしといてカラムと繋ぎ合せて 自動でSQLを作成しています。なのでSQLのなかで勝手に「UserGroup」テーブルがジョインされています。

しかし、この状態だと「UserGroup」テーブルの情報を取りたいとき取得されないみたいだったので 以下にようにして普通に結合させます。

            // user and group
            $query = Doctrine_Query::create()
                     ->from('User u')
                     ->leftJoin('u.UserGroup ug')
                     ->leftJoin('ug.Group g')
                     ->orderBy('u.id')
                           ;
            $lists = $query->execute();
            $this->view->lists = $lists;