Нулевое значение не допускается при обновлении схемы базы данных - PullRequest
0 голосов
/ 21 марта 2019

У меня есть объект с именем "FosUser":

<?php

namespace techeventBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * FosUser
 *
 * @ORM\Table(name="fos_user", uniqueConstraints={@ORM\UniqueConstraint(name="UNIQ_957A6479A0D96FBF", columns={"email_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A647992FC23A8", columns={"username_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A6479C05FB297", columns={"confirmation_token"})}, indexes={@ORM\Index(name="IDX_957A647914013572", columns={"copon_id"})})
 * @ORM\Entity
 */
class FosUser
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=180, nullable=true)
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="username_canonical", type="string", length=180, nullable=true)
     */
    private $usernameCanonical;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=180, nullable=false)
     */
    private $email;

    /**
     * @var string
     *
     * @ORM\Column(name="email_canonical", type="string", length=180, nullable=true)
     */
    private $emailCanonical;

    /**
     * @var boolean
     *
     * @ORM\Column(name="enabled", type="boolean", nullable=true)
     */
    private $enabled;

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

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

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="last_login", type="datetime", nullable=true)
     */
    private $lastLogin;

    /**
     * @var string
     *
     * @ORM\Column(name="confirmation_token", type="string", length=180, nullable=true)
     */
    private $confirmationToken;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="password_requested_at", type="datetime", nullable=true)
     */
    private $passwordRequestedAt;

    /**
     * @var array
     *
     * @ORM\Column(name="roles", type="array", nullable=true)
     */
    private $roles;

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

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

        /**
         * @var string
         *
         * @ORM\Column(name="tel", type="string", length=30, nullable=true)
         */
        private $tel;

        /**
         * @var integer
         *
         * @ORM\Column(name="age", type="integer", nullable=false)
         */
        private $age;

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

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

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

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

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

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

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

        /**
         * @var \Coupon
         *
         * @ORM\ManyToOne(targetEntity="Coupon")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="copon_id", referencedColumnName="id")
         * })
         */
        private $copon;


    }

Я удалил поля в этом объекте и изменил значение по умолчанию для полей на null ('nullable = true') следующим образом:

<?php

namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * FosUser
 *
 * @ORM\Table(name="fos_user", uniqueConstraints={@ORM\UniqueConstraint(name="UNIQ_957A6479A0D96FBF", columns={"email_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A647992FC23A8", columns={"username_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A6479C05FB297", columns={"confirmation_token"})}, indexes={@ORM\Index(name="IDX_957A647914013572", columns={"copon_id"})})
 * @ORM\Entity
 */
class FosUser extends BaseUser
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255, nullable=true)
     */
    protected $nom;

    /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=255, nullable=true)
     */
    protected $prenom;

    /**
     * @var string
     *
     * @ORM\Column(name="tel", type="string", length=30, nullable=true)
     */
    protected $tel;

    /**
     * @var integer
     *
     * @ORM\Column(name="age", type="integer", nullable=false)
     */
    protected $age;

    /**
     * @var string
     *
     * @ORM\Column(name="sexe", type="string", length=255, nullable=true)
     */
    protected $sexe;

    /**
     * @var string
     *
     * @ORM\Column(name="fonction", type="string", length=255, nullable=true)
     */
    protected $fonction;

    /**
     * @var string
     *
     * @ORM\Column(name="address", type="string", length=255, nullable=true)
     */
    protected $address;

    /**
     * @var string
     *
     * @ORM\Column(name="categorie", type="string", length=255, nullable=true)
     */
    protected $categorie;

    /**
     * @var string
     *
     * @ORM\Column(name="type", type="string", length=255, nullable=true)
     */
    protected $type;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255, nullable=true)
     */
    protected $description;

    /**
     * @var string
     *
     * @ORM\Column(name="role", type="string", length=255, nullable=true)
     */
    protected $role;

    /**
     * @var \Coupon
     *
     * @ORM\ManyToOne(targetEntity="Coupon")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="copon_id", referencedColumnName="id")
     * })
     */
    protected $copon;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

У меня были эти ошибки после обновления схемы базы данных:

В строке AbstractMySQLDriver.php 112:

Исключительная ситуация при выполнении команды ALTER TABLE fos_user CHANGE имя пользователя имя пользователяVARCHAR (180) NOT NULL, ИЗМЕНИТЬ username_canonical username_canonic al VARCHAR (180) NOT NULL, CHANGE email_canonical email_canonical email_canonical VARCHAR (18 0) NOT NULL, изменение CHANGE включено TINYINT (1) НЕ NULL, ИЗМЕНИТЬ Роли Роль LONGTEXT NOTLL NUarray) ', CHANGE nom nom VARCHAR (255) D EFAULT NULL, CHANGE prenom prenom VARCHAR (255) DEFAULT NULL':

SQLSTATE [22004]: значение NULL не разрешено: 1138 Использование неверно, де ла VALUR NULL

В строке 106 файла PDOConnection.php:

SQLSTATE [22004]: недопустимое значение NULL: 1138 Неправильное использованиеNULL

В строке 104 файла PDOConnection.php:

SQLSTATE [22004]: значение NULL не разрешено: 1138 Неверное использование данных NULL

1 Ответ

0 голосов
/ 21 марта 2019

Ваш код правильный! Ранее вы не использовали класс FOUser, ваша таблица fos_user уже имеет имя пользователя, emailCanonical и т. Д. Затем, когда вы расширяете FOSUser и обновляете схему базы данных, ваша текущая сущность не принимает нулевое значение для имени пользователя и т. Д. (Это логика FOSUser)

Решение, вы должны удалить таблицу fos_user перед обновлением схемы базы данных

...