2012-04-11 11 views
0

PropelORMを使用すると、別のModelCriteraオブジェクトをIN句としてパラメータとして追加できますか?ModelCriteriaオブジェクトのパラメータを持つPropelORM IN句

私は成功せず、次のことをしようとしていた

$oAuthorQ = new AuthorQuery(); 
$oAuthorQ->filterByLastName('Smith'); 


$oBookQ = new BookQuery(); 
$oBookQ->where('Book.Author IN ? ', $oAuthorQ); 
... 

私はエラーを受け取っ:

PHP Fatal error: Nesting level too deep - recursive dependency? 

私はちょうど私のクエリを構築するには何か間違ったことをやっている中で私の仮定がある - そこにあります私が探しているものを達成する方法?

+0

:?

$posts = CmsPostsQuery::create()->filterByDeleted(ACTIVE_RECORD)->filterByPostTypeId($postType->getId())->paginate($pageNum,10); 

私はあなたのために良い答えを偶然見つけIN句にサブクエリを追加しますか? 構文が間違っているので、達成しようとしているのは正しい質問ですか? ;) –

+0

@WilliamDURAND - はい、IN句にサブクエリがあります。 –

答えて

0

私はここにwhere inが必要と思わないです。

$oBookQ = BookQuery::create() 
    ->useAuthorQuery() 
    ->filterByLastName('Smith') 
    ->endUse() 
    ->find(); 

あなたの質問は本や著者のように単純ですか、問題はもっと複雑ですか?

+0

それよりも複雑です - 私はちょうど私が今対処しているすべてのコードを調べるのではなく、パラメータとしてクエリを持つことに煮詰めました –

0

私はPropelでこれを行う最善の方法は確かではありませんが、ちょうど最近行われた方法は2つの別々のクエリを実行することでした。このクエリは、2番目のクエリに渡すことができるIdの配列を返します。これは単一のDB呼び出しよりも効率的ではありませんが、コードはかなり読みやすくなります(これはコードに回答するための最初の試みです)

ここでは、起こった私自身のコードベースに取り組んでする:

array(5) {\n [0]=>\n string(3) "374"\n [1]=>\n string(3) "375"\n [2]=>\n string(3) "376"\n [3]=>\n string(3) "377"\n [4]=>\n string(3) "378"\n}\n 

...第二は、完全な5行です:

$posts = PostsQuery::create()->select('Id')->filterByDeleted(ACTIVE_RECORD)->filterByPostTypeId($postType->getId())->limit(5)->find()->toArray(); 


$posts2 = PostsQuery::create()->filterById($posts)->find(); 

最初のオブジェクト($記事)があります。これは、もともと単なるページ分割クエリた単純化した例であるため

免責事項:そのクエリの目的は何ですか ORM Solution for really complex queries

関連する問題