Динамические свойства в Symfony Entity Class
Я хочу загружать переменную динамически со значениями из несопоставленной базы данных (отдельный Entity Manager "ps"). Например, я создал переменную $ category.
namespace AppBundle\Entity;
/**
* ModProduct
*
* @ORM\Table(name="mod_product")
* @ORM\Entity
*/
class ModProduct
{
...
public static $categories = [];
...
}
Теперь я хочу заполнить это свойство значениями. Я подумал о следующих решениях:
- Создайте файл репозитория, но это может создать только функции "findBy", afaik
- Загрузите Entity Manager в Entity Class, но это считается плохой практикой, и я не могу найти способ сделать это.
- Косвенным способом: загрузите данные из базы данных PS в, например, файл json и создайте __construct в Entity для заполнения переменной $ Categories
Результатом должно быть просто: всякий раз, когда мне нужно ModProduct::$ Categories, он должен был один раз выбрать категории из вторичной базы данных и заполнить массив для дальнейшего использования.
1 ответ
Я бы, вероятно, создал слушатель событий postLoad и использовал бы его, чтобы делать все, что вам нужно, когда объект загружается.
Поэтому просто создайте новый класс
// Event listener
namespace Whatever;
use Doctrine\ORM\Event\LifecycleEventArgs;
class MyEventListener
{
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getObject();
// your logic here..
}
}
затем объявить его как сервис с относительным тегом
// services.yaml
Whatever\MyEventListener:
tags:
- { name: doctrine.event_listener, event: postLoad, method: postLoad }
Больше информации в официальной документации.