【发布时间】:2018-05-07 14:14:42
【问题描述】:
我是 Symfony 的新手。我正在使用版本 3。我简化了我的示例。我有 3 个表,为此我为每个表创建了一个类。
表“人”:id |姓名 表“组”:id |组的名字 表“PersonGroup”:id |人 |组
每个人可以在几个组中,每个组可以有几个人。在 PersonGroup 表中,我将人员与组联系起来。在我的控制器中,我想请求所选人员在哪个组中。但在转储中,我只有来自 PersonGroup 表的数据,而不是来自 Group 的详细信息(在本例中为名称):
PersonGroup {#485 ▼
-id: 5
-person: Person {#456 ▼
-id: 4
-name: "Adam"
-personGroups: PersistentCollection {#445 ▶}
}
-group: Group {#486 ▼
+__isInitialized__: false
-id: 5
-name: null
-personGroups: null
…2
}
}
我的控制器:
/**
* @Route("/person/{personId}", name="personController")
*/
public function showAction($personId)
{
$em = $this->getDoctrine()->getManager();
$item = $em->getRepository('AppBundle:Person')
->findOneBy(['id' => $personId]);
foreach ($person->getPersonGroup() as $personGroup) {
dump($personGroup);
}
return $this->render('person/detail.html.twig', [
'person' => $person
]);
}
人物类/实体:
class Person
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\PersonGroup", mappedBy="person")
*/
private $personGroups;
/**
* Item constructor.
*/
public function __construct()
{
$this->personGroups= new ArrayCollection();
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return ArrayCollection*
*/
public function getPersonGroups()
{
return $this->personGroups;
}
}
组类/实体:
class Group
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\PersonGroup", mappedBy="group")
*/
private $personGroups;
/**
* Item constructor.
*/
public function __construct()
{
$this->personGroups= new ArrayCollection();
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return ArrayCollection*
*/
public function getPersonGroups()
{
return $this->personGroups;
}
}
PersonGroup 类/实体:
class PersonGroup
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Person", inversedBy="group")
* @ORM\JoinColumn(nullable=false)
*/
private $person;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group", inversedBy="person")
* @ORM\JoinColumn(nullable=false)
*/
private $group;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return Person
*/
public function getPerson()
{
return $this->person;
}
/**
* @param Person $person
*/
public function setPerson(Person $person)
{
$this->person = $person;
}
/**
* @return Group
*/
public function getGroup()
{
return $this->group;
}
/**
* @param Group $group
*/
public function setGroup(Group $group)
{
$this->group = $group;
}
}
【问题讨论】:
-
Every Person could be in several groups and every groups can have several persons.这听起来更像是ManyToManyrelationship 给我。这使得PersonGroupEntity 过时了。 -
没有。我有太多的情况,后来我想添加有关我停止使用 ManyToMany 的连接的额外信息(例如:创建时间戳),而改用 ManyToOne 和 OneToMany。
标签: php mysql symfony doctrine