尝试保持一对多关系时发生错误。特别是,一个客户可能有多个家庭成员;给定的家庭成员仅与一个客户关联。 [我不熟悉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())));
}
最佳答案
我得到这个工作的时候,我没有
use Doctrine\Common\Collections\ArrayCollection;
我只是
$this->field = new \Doctrine\Common\Collections\ArrayCollection();
在我的构造函数中。
另外,您可能需要考虑将“家庭”(似乎是客户中的成员)添加为实体形式:
->add('members', 'entity', array(
'type' => new HouseholdType(),
'allow_add' => true,
'by_reference' => false,
));
关于symfony - Symfony2:在链配置的 namespace 中找不到类“Doctrine\Common\Collections\ArrayCollection”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13753772/