2017-05-26 74 views
0

這裏是我編隊類:如何加入3個表中的Symfony 3

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,formateurformation_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"); 

回答

0

我看到你的entites定義你FormationFormatteur之間的關係ManyToMany擺脫這些實體,你可以寫下面DQL的所有信息。

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

注:我有用戶FQNElearingBundle: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 

看我其他的相關答案也

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