Doctrine2-如何对关系的结果进行动态分类



我需要的东西:

我正在建立一个返回用户和一些关系的API:我有一个称为"用户"的实体,该实体具有很多关系。让我们以"评论"为例:

/**
 * @ORMOneToMany(targetEntity="Comments", mappedBy="idClient", cascade={"persist"})
 */
protected $comments;

在某些情况下,客户希望在同一查询中获取用户数据和注释数据(通过将"注释"添加到"包含查询参数(,并希望以特定顺序对评论进行排序。此顺序由客户端在查询参数中提供。在此示例中,必须通过ID ASC对评论进行排序。

/api/users?include=comments&sort=comments.id

请注意,在这种情况下,ASC是隐含的。

我具有构建查询的search()函数:

$qb = $this->createQueryBuilder($this->elementName);
/* SELECTs */
$selects = $this->getSelects($params);
foreach($selects as $select) {
    $qb->addSelect($select);
}
/* WHEREs */
$wheres = $this->getWheres($params);
foreach($wheres as $where) {
    $qb->andWhere($where);
}
/* ORDER BY */
foreach($sortBy as $column => $order) {
    $qb->addOrderBy($column, $order);
}
/* LIMIT and OFFSET */
$qb->setFirstResult($offset)
    ->setMaxResults($limit);
$query = $qb->getQuery();
$results = $query->getResult();

此功能称为获取请求的主要数据:users数据。然后,usersUserTransformer转换,以便以特定格式(JSONAPI(回答客户端。通过查询实体是对象变压器:

,稍后将调用关系(如comments(:
$comments = $user->getComments(); // Returning $this->comments in the User class.
return $this->collection($comments, new CommentsTransformer()); // sends the $comments data to the CommentsTransformer.

我尝试的

我尝试了查询构建器的addOrderBy(),但我会遇到错误,因为DQL不包含任何名为注释的关联。ID:

DoctrineORMQueryQueryException: [Semantical Error] line 0, col 110 near 'id ASC': Error: Class FooUsers has no field or association named comments.id

这是DQL:

SELECT e FROM FooUsers u WHERE [...] ORDER BY u.comments.id ASC

有什么办法可以"查看"评论属性并在我的查询中对它们进行评论?

还是我可以在用户类中注入排序顺序,以便以该动态顺序检索注释数据?例如使用$ user-> getComments($ sortby(,然后在我的用户类中捕获$ sortber(或者最好在我的实体母亲课上(,然后更改构建理论请求以添加我的分类订单?

ps:对不起(可能(英语不好,这不是我的母语。

在getComments中应用标准

use DoctrineCommonCollectionsCriteria;
public function getComments()
{
    $criteria = Criteria::create()
        ->orderBy(['id' => Criteria::ASC]);
    return $this->comments->matching($criteria);
}

相关内容

  • 没有找到相关文章

最新更新