我不确定使用 Propel 执行此操作的最佳方法,但我最近所做的一种方法是执行 2 个单独的查询,在第一个查询上使用 select 仅获取 Id。此查询返回一个 Id 数组,然后可以将其传递给第二个查询。它比单个数据库调用效率低,但代码很容易阅读(请耐心等待,这是我第一次尝试将一些代码转换为答案)
这是一个来自我碰巧在自己的代码库中工作的位置的快速测试示例:
$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
...第二个是完整的 5 行。
免责声明这是一个简化的示例,最初只是一个分页查询:
$posts = CmsPostsQuery::create()->filterByDeleted(ACTIVE_RECORD)->filterByPostTypeId($postType->getId())->paginate($pageNum,10);
我偶然发现了一个更好的答案:
ORM Solution for really complex queries