如何在 Symfony 3 中连接 3 个表



这是我的编队类:

class Formation
{
/**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var string
 *
 * @ORMColumn(name="nom", type="string", length=150, unique=true)
 */
private $nom;
/**
 * @var string
 *
 * @ORMColumn(name="description", type="text")
 */
private $description;
/**
 * @var string
 *
 * @ORMColumn(name="duree", type="string", length=100)
 */
private $duree;
/**
 * @var string
 *
 * @ORMColumn(name="difficulte", type="string", length=100)
 */
private $difficulte;
/**
 * @var string
 *
 * @ORMColumn(name="prerequis", type="text")
 */
private $prerequis;
  /**
 * @var bool
 *
 * @ORMColumn(name="is_active", type="boolean" , options={"default":false})
 */
private $is_active;
 /**
 * @ORMManyToOne(targetEntity="Category", inversedBy="formations")
 * @ORMJoinColumn(name="category_id", referencedColumnName="id")
 */
private $category;
/**
* @ORMManyToMany(targetEntity="Formatteur", mappedBy="formations")
*/
 private $formatteurs;

 //getter & setter ...
}

这是我的格式化类:

class Formatteur
{
/**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var string
 *
 * @ORMColumn(name="nom", type="string", length=255)
 */
private $nom;

/**
 * @var string
 *
 * @ORMColumn(name="prenom", type="string", length=100)
 */
private $prenom;

/**
 * @var string
 *
 * @ORMColumn(name="bio", type="string", length=100)
 */
private $bio;

/**
 * @var string
 *
 * @ORMColumn(name="email", type="string", length=255, unique=true)
 */
private $email;
/**
 * @var string
 *
 * @ORMColumn(name="specialite", type="string", length=100)
 */
private $specialite;


/**
 * @var int
 *
 * @ORMColumn(name="Age", type="integer")
 */
private $age;

 /**
 * @var bool
 *
 * @ORMColumn(name="is_active", type="boolean" , options={"default":false})
 */
private $is_active;

 /**
 * @ORMManyToMany(targetEntity="Formation", inversedBy="formatteurs")
 * @ORMJoinTable(name="formation_formatteur")
 */
 private $formations;
 //getter & setter ...
 }
  • 一个格式化师可以制作许多阵型。
  • 编队可以由多个格式化器创建。
  • 我有 3 张表:formationformateurformation_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");

我看到了你的 entites 定义,你在 FormationFormatteur 之间有一个ManyToMany关系,可以从这些实体获取所有信息,你可以在 DQL 下面写。

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

注意:我只有ElearingBundle:Formation的用户FQN,没有其他实体,在连接部分中,我使用了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处理多对多关系

相关内容

  • 没有找到相关文章