我需要的东西:
我正在建立一个返回用户和一些关系的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
数据。然后,users
由UserTransformer
转换,以便以特定格式(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);
}