2010年2月18日
symfony DoctrineのTIPS その2
こんばんは。牧野です。
最近、会社で使っているPCも自分用のノートPCもハードディスク容量が少ないせいか、重く感じるようになっていました。
そんな時に発表されたsonyの新しいVAIO Z。シミュレータで出てきた価格にびっくりしつつも、心ひかれています。。。
さて、今日はsymfonyと使うDoctrineのTIPSその2です。ここのところ、またsymfonyを触る機会が増えていました。
1.生SQLを使う
schema.ymlをちゃんと書けばDQLでたいていのことはできるのですが、そのままSQLを実行してデー タを取りたい時にどうぞ。
Doctrine_Connectionオブジェクトがあれば、とりあえず何でもできます。
$con = Doctrine::getTable(適当なテーブル)->getConnection();
$con = Doctrine_Manager::getInstance()->getConnection(コネクション名);
$sql = "select * from hogehgoe";
$results = $con->fetchAll($sql);
複数のデータを取得するfetchAll(=fetchAssoc)メソッド、一つのデータを連想配列で取得するfetchRowメソッドあたりが便利だと思います。
2.データ更新時の注意
Doctrineは関連するデータを簡単に引っ張ってこられるところが便利なのですが、データ更新をする際には気をつけたいことがあります。
あるモデルオブジェクトのデータ変更内容を確定させる前に、同じモデルオブジェクトを取得するようなことをすると、確定前のデータ変更内容はリセットされます。
具体例な例を見てみましょう。
config/schema.yml
DvdSeries:
tableName: dvd_series
columns:
id:
type: integer(4)
primary: true
autoincrement: true
series_title:
type: string(255)