2011-07-27 11 views
2

私は多くの連絡先を持つ多数のスポーツクラブを含むアプリを持っています。ColdFusion ORM:エンティティリレーションの並べ替え順

各接点は、種類のうちの1つにすることができ、これらの指定された表示順序があります。

は、私は私のエンティティ関係の連絡先については、このソート順を指定したいのですが、かなりそれを行う方法を見ることができません。

club.cfc

component persistent="true" table="clubs" 
{ 
    // identifier 
    property name="clubid" fieldtype="id" setter="false" generator="identity"; 

    // properties 
    property name="clubname"; 

    // relationships 
    property name="contacts" cfc="contact" singularname="contact" fieldtype="one-to-many" fkcolumn="clubid"; 
} 

contact.cfc

component persistent="true" table="contacts" 
{ 
    // identifier 
    property name="contactid" fieldtype="id" setter="false" generator="identity"; 

    // properties 
    property name="clubid"; 
    property name="name"; 

    //relationships 
    property name="contacttype" cfc="contacttype" fieldtype="many-to-one" fkcolumn="type"; 
} 

contacttype:ここでは、物事を少し明確にする

は私の3(簡体字)エンティティフロンあります.cfc

component persistent="true" table="contacttypes" 
{ 
    // identifier 
    property name="type" fieldtype="id" insert="false" update="false"; 

    // properties 
    property name="typename"; 
    property name="displayorder";  
} 

要するに、contacttypeのdisplayorder値に従ってソートされた連絡先を持つクラブを取得することです。

提案?あなたはHQLを使用してカスタム検索を行うためにclub.cfcでgetContactsをオーバーライドする必要がありますように

+0

あなたはその質問があなたに似た状況についてであるように見えます... [この質問](http://stackoverflow.com/q/3945734/8174)のためにサムファーマーズ提案を使用することができる場合、私は思ったんだけど。 –

答えて

3

は私にね。残念なことに私はHQLウィザードではありません。これをテストするDBはありません。

public array getContacts() 
{ 
    return ormExecuteQuery(
     "from club cl, contact co, contacttype ct 
     where co.clubid = cl.clubid and cl = :thisClub 
     order by ct.displayorder" 
     , { thisClub = this } 
    ); 
} 

私はそれが正しくありません確信している、うまくいけば、それはあなたが始められるでしょう。しかし、ここでHQLでの私のやや野生の推測です。

+0

私はこれをちょっと試してみましたが、うまく機能しましたが、問題は、getContacts()を実行するたびに、つまりすべての連絡先に対して1回だけクエリが実行されることです。私がプロパティの関係を介してそれを行うことができフェッチ= "参加"すれば、それはずっと効率的になるでしょう... – sebduggan

+0

クラブごとに1回ですか? –

関連する問題