0

使用 PropelORM,是否可以添加一个带有另一个 ModelCritera 对象作为参数的 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? 

我的假设是我只是在构建查询时做错了 - 有没有办法实现我正在寻找的东西?

4

2 回答 2

0

我不确定使用 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

于 2012-04-24T16:49:14.707 回答
0

我不认为你需要在where in这里。

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

但是您的查询是像书和作者一样简单,还是问题更复杂?

于 2012-04-11T07:19:28.717 回答