2010-11-22 6 views
0

私はプロジェクトに仕事を移植しようとしていますPropelORM。これまでのところすべてが素晴らしかったです。Propel ORM - SELECT ... WHERE col1 = col2

しかし私はテーブルの1つに設定したツリー構造の問題に遭遇しました。

かなり多くの場合ID = PARENTIDそのルートです。例えば、 。

ID | NAME | PID 
0 | ZERO | 0 
1 | ONE | 1 
2 | TWO | 1 
3 | THREE| 3 

1つと2つは実際には根です。

私はこの

$res_crit = new Criteria(); 
$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::CONVERTEDID, Criteria::EQUAL); 
$result = PropertyTypePeer::doSelect($res_crit, Propel::getConnection('system')); 

のようなものを試してみましたが、それは唯一のID = 0parent id = 0.

任意のアイデア1行を返しますか?あなたはPropelと、このようなクエリを達成するためにカスタム条件を使用する必要が

答えて

3

$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID, Criteria::CUSTOM); 

カスタム条件は、あなたのWHERE句でカスタムコードを記述することができます。そのような場合、Criteria#addの最初の引数は重要ではありません(propelでは使用されません)が、わかりやすく読みたいカラムに入れています。

+0

ありがとうございました! – Luke

+0

答えを受け入れることができますか? :-) –

+0

あなたは実際にPropelsのネストされたセットの振る舞いを調べるべきです。 – vicTROLLA

0

$res_crit->where(PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID); 

少なくとも約書くことが少なく、より読みやすいように思われます。

かなり複雑な基準で私を働かせました。

注:$criteria->where()は、ANDから条件を組み合わせたものです。

ORで組み合わせるカスタム条件が必要な場合は、$criteria->orWhere()を使用する必要があります。

関連する問題