Немного вопросов по DoctrineORM и Symfony? В ходе изучения симфонии возникло несколько вопросов, с которыми не смог разобраться. Хочу получить помощь от матерых коллег
1) В документации советуют ко всем полям сущности прописывать гетеры/сетеры. Я не понимаю зачем, если в php есть __call(). Ситуация, когда нужно сделать индивидуальную обработку поля - ясна, но зачем в большинстве случаев засорять класс однотипными методами - мне не понятно. В чем смысл
2) Сделал внешний ключ от адреса к пользователю, указал действия каскадом, связь в PMA отображается, но родительский элемент не желает удаляться т.к. есть дочерние. В чем проблема
/*
* @ORM\ManyToOne(targetEntity="Customer", cascade={"remove"}, fetch="EAGER"
* @ORM\JoinColumn(name="customer_id", referencedColumnName="customer_id"
*
protected $customerId
3) При сохранении адреса, фреймворк требует в поле $customerId передавать объект типа Customer. Я понимаю, что он скорее всего запросит id у объекта, но заче грузить в память целый объект, если я, например, заранее знаю его id? А если я хочу множество адресов переработать, то для каждого грузить его пользователя - странно выходит. Можно как-то исправить, чтобы требовалось скалярное значение, не убирая связи между сущностями?
4) Как сделать ORM-аннотацию, чтобы поле типа "datetime" заполнялось текущими датой-временем? Я написал так
/*
* @ORM\Column(type="datetime", name="inserted_at", options={"default" : "CURRENT_TIMESTAMP"}
*/
, но сохранение БД не происходит т.к. поле не может быть NULL. Гугл подсказал варианты в конструкторе или сеттере заполнять самому, но странно как-то делать то, что может сделать БД сама
Спасибо всем неравнодушным ))

21 Авг 2019 в 07:03
163 +1
0
Ответы
1

1) Использование геттеров и сеттеров в Symfony и Doctrine ORM рекомендуется из-за принципа инкапсуляции данных и соблюдения принципов объектно-ориентированного программирования. Это помогает сделать код более читаемым, поддерживаемым и расширяемым. Также геттеры и сеттеры необходимы для работы с формами Symfony, сериализации и десериализации объектов и других функциональностей.

2) Проблема с удалением родительского элемента вероятно связана с тем, что у вас есть дочерние элементы, которые ссылаются на этот родительский элемент. Поэтому перед удалением родительского элемента необходимо удалить или обработать дочерние элементы.

3) Для сохранения связанного объекта не обязательно загружать его целиком в память. Вы можете передать только его id и вручную установить связь между объектами. Например, вместо передачи объекта Customer, вы можете передать его id и использовать EntityManager для загрузки объекта перед сохранением связанного объекта.

4) Для автоматического заполнения поля типа datetime текущим временем можно использовать аннотацию @ORM\HasLifecycleCallbacks и методы @ORM\PrePersist или @ORM\PreUpdate. В этих методах вы можете установить текущее время перед сохранением объекта. Например:

/*
* @ORM\PrePersis
*
public function setCreatedAtValue(

$this->insertedAt = new \DateTime()
}

Надеюсь, это поможет вам разобраться с вашими вопросами по Symfony и Doctrine ORM. Если у вас возникнут еще вопросы, не стесняйтесь обращаться.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 581 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир