Как объединить 3 таблицы в Symfony 3

Вот мой класс Formation:

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 ...

}

Вот мой класс Formatteur:

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 ...

 }
  • Formateur может сделать много формаций.
  • Формирования могут быть созданы несколькими Formateurs.
  • У меня есть 3 таблицы: formation, formateur и formation_formateur.

Я хочу написать запрос, который возвращает всю информацию из трех таблиц. Как я могу это сделать?

Вот моя попытка:

$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");

person Reda Azizi    schedule 26.05.2017    source источник


Ответы (1)


Я видел ваше определение сущностей, у вас есть отношение ManyToMany между Formation и Formatteur, чтобы получить всю информацию от этих сущностей, которые вы можете написать ниже DQL.

SELECT FN,FR 
FROM ElearingBundle:Formation FN 
INNER JOIN FN.formatteurs FR

Примечание: у меня есть пользователь FQN только для ElearingBundle:Formation и ни для какой другой сущности, и в части соединения я использовал свойство, определенное в Formation, потому что сама доктрина определяет тип отношения и будет выполнять часть соединения, как если бы вам не нужно было указывать имена таблиц в DQL.

$query = $this->getEntityManager()
              ->createQuery("SELECT FN,FR 
                             FROM ElearingBundle:Formation FN 
                             INNER JOIN FN.formatteurs FR");

Вышеупомянутый DQL будет генерировать SQL, аналогичный приведенному ниже.

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

Смотрите также мои другие связанные ответы

Запрос на многие -много взаимосвязей с использованием Doctrine и Symfony2

Как внутреннее соединение работает с отношениями "многие ко многим" с использованием Doctrine и Symfony2

person M Khalid Junaid    schedule 04.10.2017