Как многократно использовать сущность?

Здравствуйте, зациклился на такой задаче: вообщем есть сущность User, в которой присутствуют свойства firstName, lastName, username, email и password (со временем их количество будет увеличиваться); при реализации формы регистрации, нужно сохранить лишь два свойства - email и password; но когда пытаюсь так сделать, то выбрасывается исключение, где прописывается, что Doctrina передаёт абсолютно все имеющие параметры, а не достающие выставляет в значение null. Почему происходит именно так? Может надо для каждой реализации функционала создавать свою сущность, или может нужен совсем другой подход? Кто знает, или уже сталкивался с этим вопросом, поделитесь пожалуйста, вы с экономите мне много времени.
  • Вопрос задан
  • 2352 просмотра
Пригласить эксперта
Ответы на вопрос 3
lexxpavlov
@lexxpavlov
Программист, преподаватель
У вас две возможности:
1) либо разрешить, чтобы поля могли быть пустыми - nullable
2) либо установить значение по умолчанию для поля.
namespace YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class User
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=100, nullable=true)
     */
    private $firstName;

    /**
     * @ORM\Column(type="string", length=100, nullable=true)
     */
    private $lastName;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $username = "";

    /**
     * @ORM\Column(type="string", length=100, unique=true)
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $password;

    // getters & setters
}


Смотрите, поля firstName и lastName отмечены как nullable=true, а поле username имеет значение по умолчанию (пустая строка).

P.S. не забудьте добавить поле salt помимо пароля.
P.P.S. или лучше возьмите FOSUserBundle, и не парьтесь, там уже есть отличный набор полей для юзера, плюс возможность добавить свои.
Ответ написан
Doctrina передаёт абсолютно все имеющие параметры, а не достающие выставляет в значение null. Почему происходит именно так?


А как вы хотели? Doctrine создана для работы с БД, как вы себе представляете вставку в таблицу БД(5 колонок) запись всего 2х, естественно вставка происходит целой записи и параметрам которые вы вручную не задали или не прописали их инициализацию в конструкторе, присваивается значение null.

function __construct() {
$this->firstName = "unknown";
$this->lastName= "unknown";
// и тд
}
Ответ написан
@yuklia_1
как вариант можно использовать хуки

/**
 * @ORM\Entity @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="users")
 **/
class User
{
  /**
     * @ORM\PrePersist
     */
    public function prePersist()
    {
        $this->created = new \DateTime('now');
            $this->status = self::STATUS_PENDING;
    }

    /** @ORM\PreUpdate */
    public function preUpdate()
    {
        $this->updated = new \DateTime('now');
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы