DoctrineTweetこんばんは。最近、会社で使っているPCも自分用のノートPCもハードディスク容量が少ないせいか、重く感じるようになっていました。シミュレータで出てきた価格にびっくりしつつも、心ひかれています。今日はsymfonyと使うDoctrineのTIPSその2です。ここのところ、またsymfonyを触る機会が増えていました。1.生SQLを使うschema.ymlをちゃんと書けばDQLでたいていのことはできるのですが、そのままSQLを実行してデータを取りたい時にどうぞ。Doctrine_Connectionオブジェクトがあれば、とりあえず何でもできます。$con->fetchAll($sql);複数のデータを取得するfetchAll(=fetchAssoc)メソッド、一つのデータを連想配列で取得するfetchRowメソッドあたりが便利だと思います。2.データ更新時の注意Doctrineは関連するデータを簡単に引っ張ってこられるところが便利なのですが、データ更新をする際には気をつけたいことがあります。あるモデルオブジェクトのデータ変更内容を確定させる前に、同じモデルオブジェクトを取得するようなことをすると、確定前のデータ変更内容はリセットされます。具体例な例を見てみましょう。同一シリーズのDVD発売日をまとめてずらす。$date_string;//変更前、または変更後の発売日が以前の場合は、他のDVDの発売日は変更しない。関連するdvd_packageデータの発売日も1ヶ月遅らせようとしています。肝心のidが1のdvd_packageデータが2010-03-03のままで、更新できていません。これは、changeAllSeriesReleaseDateメソッドのforeachの部分が原因です。$dvdとして自分自身を取得した際に、保存前のrelease_dateが消えてしまったのです。$date_string;の後に$this->save();を入れれば大丈夫です。今まで2回ほどこのようなケースに出会ったことがありましたので、どこかで役立つことがあるかもしれません。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。