Динамические свойства в 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 }

Больше информации в официальной документации.

Другие вопросы по тегам