【问题标题】:Symfony Form collections flush() errorSymfony 表单集合刷新()错误
【发布时间】:2013-05-30 21:17:32
【问题描述】:

我的表单收集有问题。我收到一个错误:

Notice: Array to string conversion in /home/.../vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php line 103

我尝试了 foreach(就像在教义文档中一样)并保留每个对象,但我得到一个错误:

The class 'Doctrine\Common\Collections\ArrayCollection' was not found in the chain configured namespaces FOS\UserBundle\Entity, Ix\UserBundle\Entity, Ix\x\Entity, FOS\UserBundle\Model

下面是我的代码:

实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="availability")
 */

class Availability
{
    public function __construct()
    {
        $this->availabilityFlexible = new \Doctrine\Common\Collections\ArrayCollection();
        $this->availabilitySession = new \Doctrine\Common\Collections\ArrayCollection();
    }


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="description", type="string", length=255, nullable=true)
     */
    protected $description;

    /**
     * @ORM\OneToMany(targetEntity="AvailabilityFlexible", mappedBy="availability", cascade={"persist", "remove"})
     */
    protected $availabilityFlexible;

    /**
     * @ORM\OneToOne(targetEntity="AvailabilityFull", mappedBy="availability", cascade={"persist", "remove"})
     */
    protected $availabilityFull; 

    /**
     * @ORM\OneToMany(targetEntity="AvailabilitySession", mappedBy="availability", cascade={"persist", "remove"})
     */
    protected $availabilitySession;

     // AvailabilityFlexible.php
    /**
     * @ORM\ManyToOne(targetEntity="Availability", inversedBy="availabilityFlexible", cascade={"persist"})
     * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
     */
    protected $availability;


    // AvailabilityFull.php
    /**
     * @ORM\OneToOne(targetEntity="Availability", inversedBy="availabilityFull", cascade={"persist"})
     * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
     */
    protected $availability;



    // AvailabilitySession.php
    /**
     * @ORM\ManyToOne(targetEntity="Availability", inversedBy="availabilitySession", cascade={"persist"})
     * @ORM\JoinColumn(name="availability_id", referencedColumnName="id")
     */
    protected $availability;

表格:

  public function buildForm(FormBuilderInterface $builder, array $options)
  {

    $builder->add('description')
            ->add('AvailabilitySession', 'collection', array(
                'type' => new AvailabilitySessionFormType(),
                'allow_add' => true,
                'prototype' => true,
                'by_reference' => false,
                'allow_delete' => true,
            ))
            ->add('AvailabilityFull', new AvailabilityFullFormType())
            ->add('AvailabilityFlexible', 'collection', array(
                'type' => new AvailabilityFlexibleFormType(),
                'allow_add' => true,
                'by_reference' => false,
                'allow_delete' => true,
    ));
}

控制器:

 public function addAvailabilityAction(Request $request)
 {
    $availability = new Availability;
    $availability->getAvailabilityFlexible()->add(new AvailabilityFlexible);
    $availability->getAvailabilityFlexible()->add(new AvailabilityFlexible);

    $form = $this->createForm(new AvailabilityFormType(), $availability); 

    if ($request->isMethod('POST')) {
        $form->bind($request);
        if ($form->isValid()) {
            $availability = $form->getData();
            $em = $this->getDoctrine()->getManager();
            $em->perist($availability);
            $em->flush();
        }
    }
}

【问题讨论】:

  • 你不能在 PHP 的类中拥有多次相同的属性!你得到了 3 倍的 $availability,PHP xD 没有例外吗?

标签: php symfony formcollection


【解决方案1】:

属性 $availability 属于不同的类。

  1. AvailabilityFlexible.php
  2. AvailabilityFull.php
  3. AvailabilitySession.php

这是与可用性实体的关系。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多