尝试保持一对多关系时发生错误。特别是,客户可能有多个家庭成员;给定的家庭成员与一个且仅一个客户相关联。 [我是Symfony的新手,因此预计会出现错误!]您的指导感激不尽。
N.B。下面的备用控制器代码段通过尝试将家庭表中的客户端ID设置为null来产生完整性约束错误。
namespace Mana\AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Mana\AdminBundle\Entity\Clients
*
* @ORM\Table(name="clients")
* @ORM\Entity
*/
class Clients
{
protected $members;
public function __construct()
{
$this->members = new ArrayCollection();
}
public function getMembers()
{
return $this->members;
}
public function setMembers(ArrayCollection $members)
{
$this->members = $members;
}
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\OneToMany(targetEntity="Household", mappedBy="clients")
* @ORM\ManyToOne(targetEntity="EthDesc", inversedBy="clients")
* @ORM\JoinColumn(name="eid", referencedColumnName="id")
*/
namespace Mana\AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Mana\AdminBundle\Entity\Household
*
* @ORM\Table(name="household")
* @ORM\Entity(repositoryClass="Mana\AdminBundle\Entity\HouseholdRepository")
*/
class Household {
/**
* @var integer $hid
*
* @ORM\Column(name="hid", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\ManyToOne(targetEntity="Clients", inversedBy="members")
* @ORM\JoinColumn(name="cid", referencedColumnName="id")
* @ORM\ManyToOne(targetEntity="EthDesc", inversedBy="members")
* @ORM\JoinColumn(name="eid", referencedColumnName="id")
*/
->add('members', 'collection', array(
'type' => new HouseholdType(),
'allow_add' => true,
'by_reference' => false,
'cascade_validation' => true,
));
public function createAction(Request $request) {
$entity = new Clients();
$form = $this->createForm(new ClientsType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->persist($entity->getMembers());
$em->flush();
return $this->redirect($this->generateUrl('clients_show', array('id' => $entity->getId())));
}
}
public function createAction(Request $request) {
$entity = new Clients();
$form = $this->createForm(new ClientsType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
foreach ($entity->getMembers() as $member)
{
$em->persist($member);
}
$em->flush();
return $this->redirect($this->generateUrl('clients_show', array('id' => $entity->getId())));
}
答案 0 :(得分:5)
我已经让这个工作了,我没有
use Doctrine\Common\Collections\ArrayCollection;
我只是
$this->field = new \Doctrine\Common\Collections\ArrayCollection();
在我的构造函数中。
此外,您可能需要考虑将Household(看似是客户中的成员)添加为实体形式:
->add('members', 'entity', array(
'type' => new HouseholdType(),
'allow_add' => true,
'by_reference' => false,
));
答案 1 :(得分:4)
在我的情况下,我(错误地)尝试访问ToMany关系,因为它是ToOne关系(similar to this answer)。