Propel でこれを行う最善の方法は確かではありませんが、最近私が行った方法は、ID のみを取得するために最初のクエリで選択を使用して、2 つの別々のクエリを実行することでした。このクエリは、2 番目のクエリに渡すことができる ID の配列を返します。単一の DB 呼び出しよりも効率的ではありませんが、コードは非常に読みやすいです (これは、いくつかのコードを回答に入れる最初の試みです)。
これは、私がたまたま自分のコードベースで作業していた場所からの簡単なテスト済みの例です。
$posts = PostsQuery::create()->select('Id')->filterByDeleted(ACTIVE_RECORD)->filterByPostTypeId($postType->getId())->limit(5)->find()->toArray();
$posts2 = PostsQuery::create()->filterById($posts)->find();
最初のオブジェクト ($posts) は次のとおりです。
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
...そして 2 番目は完全な 5 行です。
これは単純化された例であり、元はページ分割されたクエリであったことに対する免責事項:
$posts = CmsPostsQuery::create()->filterByDeleted(ACTIVE_RECORD)->filterByPostTypeId($postType->getId())->paginate($pageNum,10);
私はあなたのためのより良い答えに出くわしました:
本当に複雑なクエリのためのORMソリューション