2012-05-01 18 views
2

自動生成されたフォームを使用して新しいUserProfileを追加すると、次のエラーが表示されます。エラーは次のとおりです: オブジェクトが必要ですがコレクションがあります。エンティティフィールドに "multiple = true"を渡すことを忘れましたか?symfony 2 - 1対1のマッピング

私は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; 
} 
} 

答えて

3

問題はあなたのフォームにあります... これを試してください。

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'); }, 

} 
+0

私のために働いた。これは1対1の関係であるため、複数は真実であってはなりません。私はまた、UserProfileからコンストラクタを削除しました。ありがとう。 – biztiger

+0

常に喜んで助けてください –

1

別のフォームでフォームを埋め込む場合、あなたはのUserTypeでdata_classオプションを設定することによって、オブジェクトの種類を埋め込まれたフォームマップを宣言する必要があります:: getDefaultOptions()。

例としてhttp://symfony.com/doc/current/book/forms.html#embedding-a-single-objectを参照してください。

+0

ありがとう。私はマニュアルをチェックすべきだった。 – biztiger

関連する問題