我正在构建一个返回用户和一些关系的API:我有一个名为“User”的实体,它有很多关系。我们以“评论”为例:
/**
* @ORM\OneToMany(targetEntity="Comments", mappedBy="idClient", cascade={"persist"})
*/
protected $comments;
在某些情况下,客户希望在同一查询中获取用户数据和评论数据(通过向“include query param”添加“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不包含名为comments.id的任何关联:
Doctrine\ORM\Query\QueryException: [Semantical Error] line 0, col 110 near 'id ASC': Error: Class Foo\Users has no field or association named comments.id
这是DQL:
SELECT e FROM Foo\Users u WHERE [...] ORDER BY u.comments.id ASC
有什么方法可以“查看”评论属性并在我的查询中对它们进行排序吗?
或者有什么方法可以在我的Users类中注入排序顺序,以便它能够以动态顺序检索注释数据吗?比如使用$ user-> getComments($ sortBy),然后在我的Users类中捕获$ sortBy(或者最好在我的实体母类中)并更改内置的Doctrine请求以添加我的排序顺序?
PS:抱歉(可能)英语不好,这不是我的母语。答案 0 :(得分:1)
在你的getComments函数中应用标准,如
library(httr)
apikey <- "foo"
pass <- "bar"
orders <- GET(
url = "https://yourshop.myshopify.com/admin/orders.json",
authenticate(user = apikey, password = pass)
)
content(orders)