Reputation: 3
Here is my Formation class:
class Formation
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=150, unique=true)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @var string
*
* @ORM\Column(name="duree", type="string", length=100)
*/
private $duree;
/**
* @var string
*
* @ORM\Column(name="difficulte", type="string", length=100)
*/
private $difficulte;
/**
* @var string
*
* @ORM\Column(name="prerequis", type="text")
*/
private $prerequis;
/**
* @var bool
*
* @ORM\Column(name="is_active", type="boolean" , options={"default":false})
*/
private $is_active;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="formations")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
/**
* @ORM\ManyToMany(targetEntity="Formatteur", mappedBy="formations")
*/
private $formatteurs;
//getter & setter ...
}
Here is my Formatteur class:
class Formatteur
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="prenom", type="string", length=100)
*/
private $prenom;
/**
* @var string
*
* @ORM\Column(name="bio", type="string", length=100)
*/
private $bio;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="specialite", type="string", length=100)
*/
private $specialite;
/**
* @var int
*
* @ORM\Column(name="Age", type="integer")
*/
private $age;
/**
* @var bool
*
* @ORM\Column(name="is_active", type="boolean" , options={"default":false})
*/
private $is_active;
/**
* @ORM\ManyToMany(targetEntity="Formation", inversedBy="formatteurs")
* @ORM\JoinTable(name="formation_formatteur")
*/
private $formations;
//getter & setter ...
}
formation
, formateur
and formation_formateur
.I want to write a query that returns all information from three tables. How do I do that?
Here is my try:
$query = $this->getEntityManager()->createQuery("SELECT FR,FN,T FROM
ElearingBundle:Formation FN INNER JOIN ElearingBundle:Formatteur FR WITH
FR.id=T.formateur INNER JOIN formation_formateur T WITH FN.id=I.formation");
Upvotes: 0
Views: 1364
Reputation: 64466
I saw your entites definition you have a ManyToMany
relation between Formation
and Formatteur
to get all information from these entities you can write below DQL.
SELECT FN,FR
FROM ElearingBundle:Formation FN
INNER JOIN FN.formatteurs FR
Note: i have user FQN for only
ElearingBundle:Formation
and no other entity and in join part i have used a property defined inFormation
because doctrine itself identify the relation type and will do the join part like you don't have to specify the table names in DQL.
$query = $this->getEntityManager()
->createQuery("SELECT FN,FR
FROM ElearingBundle:Formation FN
INNER JOIN FN.formatteurs FR");
Above DQL will generate SQL similar like below
SELECT FN.*,FR.*
FROM formation FN
JOIN formation_formateur FF ON FF.formation_id = FN.id
JOIN formateur FR ON FF.formateur_id = FR.id
See my other related answers also
Query on a many-to-many relationship using Doctrine with Symfony2
How does inner join work on a many-to-many relationship using Doctrine and Symfony2
Upvotes: 1