0
Ich habe Entitäten: Tag
, User
und Service
. Tag
hat viele-zu-viele-Beziehung mit sowohl User
und Service
.Doctrine Mysql: mehrere Joins in Abfrage-Generator
class Service{
/**
* @ORM\ManyToMany(targetEntity="Tag", mappedBy="serviceList")
*/
private $tagList;
}
class User{
/**
* @ORM\ManyToMany(targetEntity="Tag", mappedBy="userList")
*/
private $tagList;
}
class Tag{
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="tagList")
* @ORM\JoinTable(name="tags_users")
*/
private $userList;
/**
* @ORM\ManyToMany(targetEntity="Service", inversedBy="tagList")
* @ORM\JoinTable(name="tags_services")
*/
private $serviceList;
}
Mit Query Builder wie kann ich alle Dienste zurück, die den Benutzer im Zusammenhang mindestens 1 gemeinsamen Tag mit bestimmten User
, dh Dienstleistungen hat
Dies ist eine Abfrage, die ich geschrieben habe, aber es ist nicht der Fall ist
$query = $em->getRepository('AppBundle:Service')
->createQueryBuilder('service')
->join('service.tagList', 'serviceTag')
->join('AppBundle:BasicUser', 'user')
->join('user.tagList', 'userTag')
->where('user.id = :id')
->andWhere('serviceTag.id = userTag.id')
->setParameter('id', $user->getId())
;
Fehler arbeiten:
[Syntax Error] line 0, col 104: Error: Expected Literal, got "JOIN" (500 Internal Server Error)
gute lösung, einige explinatio about the innerJoin tag plz – ahmedbhs