Symfony实体类中的动态属性

时间:2018-07-26 10:02:34

标签: symfony entity symfony3.x

我想使用来自未映射数据库(单独的实体管理器“ ps”)中的值动态加载变量。例如,我创建了变量$ categories。

namespace AppBundle\Entity;


/**
 * ModProduct
 *
 * @ORM\Table(name="mod_product")
 * @ORM\Entity
 */
class ModProduct
{
...
public static $categories = [];
...
}

现在,我想用值填充此属性。我想到了以下解决方案:

  • 创建存储库文件,但这只能创建“ findBy”功能afaik
  • 在Entity Class中加载Entity Manager,但这被认为是一种不好的做法,我真的找不到解决方法。
  • 间接方式:将数据从PS数据库加载到例如json文件并在实体中创建__construct来填充$ categories变量

结果应该简单地是,每当我需要ModProduct :: $ categories时,它应该已经从辅助数据库中提取了一次类别,并填充了阵列以供进一步使用。

1 个答案:

答案 0 :(得分: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 }

official documentation中的更多信息。