从与 Doctrine2 的多对多关系中获取数据
Posted
技术标签:
【中文标题】从与 Doctrine2 的多对多关系中获取数据【英文标题】:Get data from a ManyToMany relationship with Doctrine2 【发布时间】:2014-12-01 23:37:52 【问题描述】:我在教师表和组表之间有以下关系N:N,其中还有第三个教师组表。
我想列出老师给我带这个老师教的所有小组(**是相关的**),但是当我得到所有老师的返回时,$teacher->getClasses()
是空的。
这是我的代码:
教师控制器:
namespace App\Controllers;
class TeacherController extends Controller
public function index()
$this->teachers = $this->model->getRepository()->findAll();
// Bring all teachers, but does not bring their groups
// with $teachers->getGroups()
foreach ($this->teachers as $teachers)
var_dump($teachers->getGroups()); die();
教师实体:
namespace App\Entities;
use Doctrine\Common\Collections\ArrayCollection as ArrayCollection;
/**
* @Entity
* @Table(name="teachers")
*/
class Teacher
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
**/
private $id;
/**
* @ManyToMany(targetEntity="Group", mappedBy="teachers")
**/
private $groups;
public function __construct()
$this->groups = new ArrayCollection();
public function setGroups($groups)
$this->groups = $groups;
public function getGroups()
return $this->groups;
集团实体:
namespace App\Entities;
use Doctrine\Common\Collections\ArrayCollection as ArrayCollection;
/**
* @Entity
* @Table(name="groups")
*/
class Group
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
**/
private $id;
/**
* @ManyToMany(targetEntity="Teacher")
* @JoinTable(name="teachers_groups",
* joinColumns=@JoinColumn(name="id_group",referencedColumnName="id"),
* inverseJoinColumns=@JoinColumn(name="id_teacher", referencedColumnName="id")
* )
**/
private $teachers;
public function __construct()
$this->teachers = new ArrayCollection();
public function setTeachers($teachers)
$this->teachers = $teachers;
public function getTeachers()
return $this->teachers;
【问题讨论】:
不知道是不是Group->teachers中缺少的inversedBy="groups"
。如果添加它没有帮助,请在 BasicEntityPersister::getManyToManyStatement()
中的 return $this->conn->executeQuery($sql, $params, $types);
之前打印出 $sql
以查看发生了什么。
【参考方案1】:
在我看来,您在 Doctrine 注释中没有正确引用命名空间。
解决方案 1:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\ManyToMany(targetEntity="Teacher")
* @ORM\JoinTable(name="teachers_groups",
...
或解决方案 2:
use Doctrine\ORM\Mapping\ManyToMany;
use Doctrine\ORM\Mapping\JoinTable;
...
/**
* @ManyToMany(targetEntity="Teacher")
* @JoinTable(name="teachers_groups",
...
换句话说,您的注释当前被忽略。我很惊讶您的教师存储库甚至将教师类识别为一个实体。
【讨论】:
我按照自己文档的例子:http://doctrine-orm.readthedocs.org/en/latest/reference/advanced-configuration.html
。并且毫无问题地获得我的实体,包括其他具有 1:1 关系的粗鲁学生和班级。注释没问题。除非遗漏一些关于这种关系的东西。以上是关于从与 Doctrine2 的多对多关系中获取数据的主要内容,如果未能解决你的问题,请参考以下文章