OneToMany Доктрина Symfony2 проблема взаимоотношений

1

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

От пользователя:

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.

Теги:
doctrine2

1 ответ

3
Лучший ответ

Здесь я вижу два вопроса.

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

Обратная сторона вашей ассоциации 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
    Это помогло, большое спасибо, я буду иметь в виду, чтобы изменить его на пользовательский, поэтому значения сопоставленных и инвертированных атрибутов являются полями класса сущности?
  • 0
    Да, mappedBy и inversedBy относятся к элементу каждой связанной сущности, и они будут использоваться для их обработки соответственно (извлечение / создание / редактирование / удаление) с помощью методов получения и установки. @helmbert Спасибо за вашу работу

Ещё вопросы

Сообщество Overcoder
Наверх
Меню