忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 08:23 |
Symfony-Doctrineで任意のSQLを実行する

びっくりするほど使い辛いなDoctrine

とりあえず
 

SELECT 
  a.id AS id
  ,(
    select count(*) from b
    where b.a_id=a.id
    group by a.id 
  ) AS count
FROM a

の発行方法がわからない。

確かに簡単なSELECTやINSERTなんかはDoctrineを使えば一瞬でできるので便利といえば便利なのですが、リレーションのついてないテーブルをくっつけたり変に集約したサブクエリみたいな入り組んだものを作ったりしようとすると途端に訳が解らなくなります。
まあドキュメントをほじくり返せばこういったDQLを作成する方法も何処かに書いてあったりするようですが、よくわからん。


というわけでDoctrineで任意のSQLを発行する方法です。

getconnection.php
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    
    //DBコネクション
        $q=Doctrine::getConnectionByTableName('a');
    
    //任意のSQL
        $sql='SHOW TABLES';
    
    //実行
        $statement=$q->execute($sql);
    
    //取得
        $ret=$statement->fetchAll(PDO::FETCH_ASSOC);

PropelにはPropel::getConnection()という直接コネクションを取得できるメソッドがあるのですが、Doctrineには何故か存在しないようです。
Doctrine::getConnectionByTableName()は一見ATable extends Doctrine_Tableあたりを通じてコネクションを取得するメソッドのように見えますが、実際には引数を使っていないようで、適当な文字列を入れるだけでコネクションが取得できたりします。
コネクションに使用されるモジュールは環境によって変わると思いますが、PDOが入っていればPDOになると思いますので、あとは普通にPDOのメソッドを実行するだけです。

まあ掟破りな方法かもしれませんが、Doctrineが訳の解らない作りになっているのが悪い。
 

Symfonyの記事一覧
PR


2009/11/17 22:51 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<ゲームレビュー:メモリーズオフ6 NextRelation | HOME | 買ったものリスト 2009/11/15>>
忍者ブログ[PR]