2016-01-10 3 views
1

У меня проблема с отношением OneToMany, у меня есть пользователь, который может пожертвовать кровь, чтобы у него было много доноров крови, мое приложение работает нормально, но в моем профилировщике у меня есть 2 ошибки.Проблема с OneToMany Doctrine Symfony2

от пользователей Entity:

The association AppBundle\Entity\Users#userDonation refers to the owning side field AppBundle\Entity\UserDonates#id which is not defined as association, but as field. 
The association AppBundle\Entity\Users#userDonation refers to the owning side field AppBundle\Entity\UserDonates#id which does not exist. 

и от UserDonates:

The mappings AppBundle\Entity\UserDonates#userId and AppBundle\Entity\Users#userDonation are inconsistent with each other. 

Вот мои объекты:

UserDonates:

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 
/** 
* @ORM\ManyToOne(targetEntity="Users", inversedBy="userDonation") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
protected $userId; 
/** 
* @var string 
* 
* @ORM\Column(name="place", type="string", length=255) 
*/ 
private $place; 

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

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


/** 
* @var integer 
* @ORM\Column(name="blod_donated", type="integer") 
*/ 

private $blood_donated; 

пользователей:

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

    /** 
    * @ORM\OneToMany(targetEntity="UserDonates", mappedBy="id", cascade={"persist","remove"}) 
    */ 
    protected $userDonation; 

    /** 
    * @ORM\OneToOne(targetEntity="UserInfo", cascade={"persist","remove"}) 
    */ 
    private $profil; 

//__construct() from FOSUserBundle 
    public function __construct(){ 
     parent::__construct(); 
    } 

Сущность пользователя также относится к UserInfo с отношением OneToOne.

ответ

3

Здесь я вижу две проблемы.

Ассоциация AppBundle \ Entity \ Users # userDonation относится к области боковой владеющее AppBundle \ Entity \ UserDonates # Идентификатор, который не определяется как объединение, а как поле.

обратная сторона вашего User::$userDonation ассоциации не id поле, но userId поле в UserDonation сущности. Отображение должно выглядеть следующим образом:

/** 
* Here! -----------------------------------------------v 
* @ORM\OneToMany(targetEntity="UserDonates", mappedBy="userId", cascade={"persist","remove"}) 
*/ 
protected $userDonation; 

Как примечание стороны, я хотел бы предложить, называя userId атрибут user вместо; ведь он будет содержать фактический пользовательский объект, а не только идентификатор пользователя.

Объединение AppBundle \ Entity \ Users # userDonation относится к полю стороны владельца AppBundle \ Entity \ UserDonates # id, который не существует.

Ваш UserDonates::$id атрибут является закрытым. Все свойства, управляемые Doctrine, должны быть protected, чтобы Doctrine могла заполнить их данными.

+0

Это помогло, большое спасибо, я буду иметь в виду изменить его для пользователя, поэтому сопоставленные и инвертированные значения атрибутов являются полями класса сущностей? – Syeth

+0

Да, атрибуты 'mappedBy' и' inversedBy' относятся к члену каждого связанного объекта, и они будут использоваться для их обработки соответственно (извлечения/создания/редактирования/удаления) через геттеры и сеттеры. @helmbert Спасибо за вашу работу – chalasr

Смежные вопросы