Php symfony 2-一对一映射

Php symfony 2-一对一映射,php,symfony,Php,Symfony,当我想使用自动生成的表单添加新的UserProfile时,出现以下错误。错误为: 需要一个对象,但得到了一个集合。是否忘记将“multiple=true”传递给实体字段? 我正在使用Symfony 2.0.12 这是我的UserProfile实体代码。控制器出现问题,但我不确定如何解决。请帮忙 <?php namespace Infidia\OutsourceBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Com

当我想使用自动生成的表单添加新的UserProfile时,出现以下错误。错误为: 需要一个对象,但得到了一个集合。是否忘记将“multiple=true”传递给实体字段?

我正在使用Symfony 2.0.12

这是我的UserProfile实体代码。控制器出现问题,但我不确定如何解决。请帮忙

<?php

namespace Infidia\OutsourceBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Infidia\OutsourceBundle\Entity\UserProfile
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Infidia\OutsourceBundle\Entity\UserProfileRepository")
 */
class UserProfile
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 *
 * @ORM\OneToOne(targetEntity="User")
 * @orm:JoinColumn(name="userid", referencedColumnName="id")
 */
private $user;

/**
 * @var  integer $userid
 */
private $userid;

/**
 * @var text $street_address
 *
 * @ORM\Column(name="street_address", type="text")
 */
private $street_address;

/**
 * @var string $city
 *
 * @ORM\Column(name="city", type="string", length=255)
 */
private $city;

/**
 * @var string $country
 *
 * @ORM\Column(name="country", type="string", length=255)
 */
private $country;

/**
 * @var string $zipcode
 *
 * @ORM\Column(name="zipcode", type="string", length=255)
 */
private $zipcode;

/**
 * @var string $timezone
 *
 * @ORM\Column(name="timezone", type="string", length=12)
 */
private $timezone;

/**
 * @var string $contact_no
 *
 * @ORM\Column(name="contact_no", type="string", length=20)
 */
private $contact_no;

/**
 * @var date $birthday
 *
 * @ORM\Column(name="birthday", type="date")
 */
private $birthday;

/**
 * @var string $gender
 *
 * @ORM\Column(name="gender", type="string", length=15)
 */
private $gender;


/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}


/**
 * Set street_address
 *
 * @param text $streetAddress
 */
public function setStreetAddress($streetAddress)
{
    $this->street_address = $streetAddress;
}

/**
 * Get street_address
 *
 * @return text 
 */
public function getStreetAddress()
{
    return $this->street_address;
}

/**
 * Set city
 *
 * @param string $city
 */
public function setCity($city)
{
    $this->city = $city;
}

/**
 * Get city
 *
 * @return string 
 */
public function getCity()
{
    return $this->city;
}

/**
 * Set country
 *
 * @param string $country
 */
public function setCountry($country)
{
    $this->country = $country;
}

/**
 * Get country
 *
 * @return string 
 */
public function getCountry()
{
    return $this->country;
}

/**
 * Set zipcode
 *
 * @param string $zipcode
 */
public function setZipcode($zipcode)
{
    $this->zipcode = $zipcode;
}

/**
 * Get zipcode
 *
 * @return string 
 */
public function getZipcode()
{
    return $this->zipcode;
}

/**
 * Set timezone
 *
 * @param string $timezone
 */
public function setTimezone($timezone)
{
    $this->timezone = $timezone;
}

/**
 * Get timezone
 *
 * @return string 
 */
public function getTimezone()
{
    return $this->timezone;
}

/**
 * Set contact_no
 *
 * @param string $contactNo
 */
public function setContactNo($contactNo)
{
    $this->contact_no = $contactNo;
}

/**
 * Get contact_no
 *
 * @return string 
 */
public function getContactNo()
{
    return $this->contact_no;
}

/**
 * Set birthday
 *
 * @param date $birthday
 */
public function setBirthday($birthday)
{
    $this->birthday = $birthday;
}

/**
 * Get birthday
 *
 * @return date 
 */
public function getBirthday()
{
    return $this->birthday;
}

/**
 * Set gender
 *
 * @param string $gender
 */
public function setGender($gender)
{
    $this->gender = $gender;
}

/**
 * Get gender
 *
 * @return string 
 */
public function getGender()
{
    return $this->gender;
}

/**
 * Set experience
 *
 * @param \Infidia\OutsourceBundle\Entity\text $experience
 */
public function setExperience($experience)
{
    $this->experience = $experience;
}

/**
 * Get Experience
 *
 * @return \Infidia\OutsourceBundle\Entity\text
 */
public function getExperience()
{
    return $this->experience;
}

/**
 * Set UserId
 *
 * @param int $userid
 */
public function setUserid($userid)
{
    $this->userid = $userid;
}

/**
 * Get UserId
 * @return int
 */
public function getUserid()
{
    return $this->userid;
}

public function __construct()
{
    $this->user = new ArrayCollection();
}

/**
 * Set user
 *
 * @param Infidia\OutsourceBundle\Entity\User $user
 */
public function setUser(\Infidia\OutsourceBundle\Entity\User $user)
{
    $this->user = $user;
}

/**
 * Get user
 *
 * @return Infidia\OutsourceBundle\Entity\User 
 */
public function getUser()
{
    return $this->user;
}
}

在另一个表单中嵌入表单时,需要通过在UserType::getDefaultOptions()中设置data_class选项来声明嵌入表单映射到的对象类型


请参阅以获取示例。

将表单嵌入另一个表单时,需要通过在UserType::getDefaultOptions()中设置data_类选项来声明嵌入表单映射到的对象类型


请参阅以获取示例。

问题在您的表单中。。。 试试这个

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


        $builder
->add('employeeType', 'entity', array(
                    'class' => 'MyProject\EntityBundle\Entity\Employee',
                    'property' => 'name',
                      'multiple'=>'true','query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },

}

问题出在你身上。。。 试试这个

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


        $builder
->add('employeeType', 'entity', array(
                    'class' => 'MyProject\EntityBundle\Entity\Employee',
                    'property' => 'name',
                      'multiple'=>'true','query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },

}

为我工作。因为这是一对一的关系,所以multiple不应该是真的。我还从UserProfile中删除了构造函数。谢谢,为我工作。因为这是一对一的关系,所以multiple不应该是真的。我还从UserProfile中删除了构造函数。谢谢