尝试保持一对多关系时发生错误。特别是,一个客户可能有多个家庭成员;给定的家庭成员仅与一个客户关联。 [我不熟悉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/

10-16 18:35