Как сказать Doctrine сохранить ID - PullRequest
0 голосов
/ 27 мая 2020

У меня есть код с Doctrine аннотациями для того, как сохранить его в БД.

У меня есть строка идентификатора, которая уже была сгенерирована системой. Я хочу сказать Doctrine использовать идентификатор в качестве первичного ключа, а также сохранить его в базе данных при сохранении объекта.

В настоящее время кажется, что Doctrine просто не записывает это поле.

Doctrine \ DBAL \ Exception \ NotNullConstraintViolationException: исключение произошло при выполнении 'INSERT INTO голосование_motion (тип, имя, время_пуска, время_кр_дата, created_at, updated_at) VALUES (?,?,?,?,?,? ) 'с params ["personal_opinion", "Вопрос о еде", "2020-07-02 12:00:00", "2020-07-07 13:00:00", "2020-05-27 11:16 : 49 "," 2020-05-27 11:16:49 "]:

т.е. оператор вставки в просто не включает поле идентификатора.

Я думал, что GeneratedValue аннотация была бы уместной здесь. Но кажется, что нет.

Как мне сказать Doctrine, что «это основной идентификатор, и я хочу, чтобы вы записали его при сохранении объекта»?

Это мой код сущности с соответствующими аннотациями выглядит так.

/**
 * @Entity
 * @Table(name="voting_motion")
 * @HasLifecycleCallbacks
 */
class VotingMotion 
{
    /**
     * @Id()
     * @Column(name="id", type="string", unique=true)
     * @GeneratedValue(strategy="NONE")
     */
    private string $id;

    /** @Column(type="string") **/
    private string $type;

    /** @Column(type="string") **/
    private string $name;

    // ...
    // ...    
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Я использую стратегию = "UUID" и отлично работает

  /**
     * @ORM\Id
     * @ORM\Column(type="guid")
     * @ORM\GeneratedValue(strategy="UUID")
     */
    protected $id;
0 голосов
/ 27 мая 2020

Эти аннотации подходят для меня, вам не нужно использовать аннотацию @GeneratedValue(strategy="NONE"). Также запустите migrations:diff после изменений в аннотации GeneratedValue.

/**
 * @ORM\Id()
 * @ORM\Column(type="guid", unique=true)
 */
private $id;
...