Brauchen Sie Hilfe bei komplexen Abfrage. Server erhalten einige Parameter für die Abfrage, als diese Abfrage Serialisierung zu Json ist. Ich muss eine Durchschnittsbewertung für jede Quest hinzufügen (so dass das Feld von json.item [i] .rating aus zugänglich ist) und sie mit Bewertung sortieren.Doctrine Query Builder komplexen Regel
Und noch eine Sache: gibt es bessere Möglichkeit, durchschnittliche Bewertung in db zu halten? Ich denke, dass das Berechnen der Bewertung die ganze Zeit keine gute Idee ist.
PS: btw Schalter Fall ist schneller für Null überprüfen?
//some params
$repository = $this->getDoctrine()->getRepository('AppBundle:Quest');
$qb = $repository->createQueryBuilder('q')
->innerJoin('q.city', 'c')
->where('c.id = :city_id')
->setParameter('city_id', $cityId);
if($minPlayers != null){
$qb ->andWhere('q.minplayers >= :minplayers')
->setParameter('minplayers', $minPlayers);
}
if($maxPlayers != null){
$qb ->andWhere('q.maxplayers <= :maxplayers')
->setParameter('maxplayers', $maxPlayers);
}
if($tagsId != null){
$qb ->innerJoin('q.tags','t')
->andWhere('t.id IN (:tags)')
->setParameter(':tags', implode(",", $tagsId));
}
if($organizerId != null){
$qb ->andWhere('q.organizer = :organizer_id')
->setParameter('organizer_id', $organizerId);
}
if($ispremium != null){
$qb ->andWhere('q.ispremium = :isPremium')
->setParameter('isPremium', $ispremium)
->addOrderBy('q.premiumorder', 'ASC');
}
$qb ->setFirstResult($FirstResult)
->setMaxResults($MaxResults);
$query = $qb->getQuery();
$paginator = new Paginator($query, $fetchJoinCollection = true);
$c = count($paginator);
$result = $query->getResult();
$serializer = $this->get('jms_serializer');
$data = $serializer->serialize($result, 'json',
SerializationContext::create()
->enableMaxDepthChecks()
->setGroups(array('questSearch'))
);
$json ='{"total_count":'.$c.',"items":'.$data.',"amountOfelems":'.$amountOfelems.',"citySlug":'.json_encode($citySlug).',"userId":'.json_encode($userId).'}';
return new JsonResponse($json);
Einheiten:
class Quest{
...
/**
* @OneToMany(targetEntity="AppBundle\Entity\Comment", mappedBy="quest")
*/
protected $comments;
}
class Comments{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
protected $rating;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Quest", inversedBy="comments")
* @ORM\JoinColumn(name="quest_id", referencedColumnName="id")
*/
protected $quest;
}