Доктрина ассоциации сохраняются - PullRequest
0 голосов
/ 01 октября 2018

У меня проблема с доктриной.У меня есть две сущности.

FriendRequest

class FriendRequest
{

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

/**
 * First person from friendship
 *
 * @ORM\OneToOne(targetEntity="User")
 * @ORM\JoinColumn(name="id", referencedColumnName="id")
 */
protected $from;

/**
 * Second person from friendship
 *
 * @ORM\OneToOne(targetEntity="User")
 * @ORM\JoinColumn(name="id", referencedColumnName="id")
 */
protected $to;



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

/**
 * @return mixed
 */
public function getFrom()
{
    return $this->from;
}

/**
 * @param mixed $from
 */
public function setFrom($from)
{
    $this->from = $from;
}

/**
 * @return mixed
 */
public function getTo()
{
    return $this->to;
}

/**
 * @param mixed $to
 */
public function setTo($to)
{
    $this->to = $to;
}

}  

И пользователь

/**
* @ORM\Entity @ORM\Table(name="users")
*/
class User
{

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

/** @ORM\Column(type="string") **/
protected $email;

/** @ORM\Column(type="string") **/
protected $password;

/** @ORM\Column(type="string") **/
protected $name;

/** @ORM\Column(type="string") **/
protected $surname;

/** @ORM\Column(type="date")  **/
protected $date;

/** @ORM\Column(type="string") **/
protected $sex;

/**
 * @return mixed
 */
public function getSex()
{
    return $this->sex;
}

/**
 * @param mixed $sex
 */
public function setSex($sex)
{
    $this->sex = $sex;
}


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

/**
 * @param mixed $id
 */
public function setId($id)
{
    $this->id = $id;
}

/**
 * @return mixed
 */
public function getEmail()
{
    return $this->email;
}

/**
 * @param mixed $email
 */
public function setEmail($email)
{
    $this->email = $email;
}

/**
 * @return mixed
 */
public function getPassword()
{
    return $this->password;
}

/**
 * @param mixed $password
 */
public function setPassword($password)
{
    $this->password = $password;
}

/**
 * @return mixed
 */
public function getName()
{
    return $this->name;
}

/**
 * @param mixed $name
 */
public function setName($name)
{
    $this->name = $name;
}

/**
 * @return mixed
 */
public function getSurname()
{
    return $this->surname;
}

/**
 * @param mixed $surname
 */
public function setSurname($surname)
{
    $this->surname = $surname;
}

/**
 * @return mixed
 */
public function getDate()
{
    return $this->date;
}

/**
 * @param mixed $date
 */
public function setDate($date)
{
    $this->date = $date;
}

}

Я пытался создать новый запрос дружбы.

    $from = $this->entity_manager->getRepository(User::class)->findOneBy(
        ["id" => $my_id]
    );

    $to = $this->entity_manager->getRepository(User::class)->findOneBy(
        ["id" => $target_user_id]
    );

    /** @var FriendRequest $friend_request */
    $friend_request = new FriendRequest();

    $friend_request->setFrom($from);
    $friend_request->setTo($to);

    $this->entity_manager->persist($friend_request);
    $this->entity_manager->flush();

Но он не работает,Doctrine показывает мне ошибку:

Возникла исключительная ситуация при выполнении 'INSERT INTO friendRequest (id) VALUES (?)' С параметрами [186]:

SQLSTATE [HY000]: Общая ошибка: 1364 Поле'from' не имеет значения по умолчанию.

Я пытался напечатать $ from ad $ to, но они верны.Есть кто-то, кто знает, что это значит?Я провел много времени с ним, но я не знаю ...

1 Ответ

0 голосов
/ 01 октября 2018

Я думаю, что ваша проблема связана с объявлением атрибутов $ from и $ to в классе сущности FriendRequest. Если вы попытаетесь обновить модель базы данных, вы получите ошибку, подобную этой:

[Doctrine \ ORM \ Mapping \ MappingException]
Дублирующее определение столбца 'id' для сущности 'FriendRequest' в сопоставлении столбца поля или дискриминатора.

Поскольку вы назначили одно и то же имя 'id' для двух разныхатрибутов.Возможно, в вашей базе данных есть два столбца From и To, но они не сопоставляются с вашей моделью, поэтому вы получаете сообщение об ошибке, не имеющее значения по умолчанию.Поскольку имя столбца в базе данных не синхронизировано с именем атрибутов в вашей сущности.

Предполагается, что у вас уже есть таблица FriendRequest и вы используете «from» и «to» в качестве имен столбцов, это должнобыть обновлением класса сущности FriendRequest.

class FriendRequest
{

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

    /**
    * First person from friendship
    *
    * @ORM\OneToOne(targetEntity="User")
    * @ORM\JoinColumn(name="from", referencedColumnName="id")
    */
    protected $from;

    /**
    * Second person from friendship
    *
    * @ORM\OneToOne(targetEntity="User")
    * @ORM\JoinColumn(name="to", referencedColumnName="id")
    */
    protected $to;

    ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...