具有接口的DQL学说



我在我的一个便携式捆绑包中有一个实体,其中映射了supperclass。我将其扩展到每个单独的项目/网站的真实实体,并在主要项目捆绑中实现其他属性。我正在使用接口和分辨率使用接口来关联实体。到目前为止,这部分的运作完美。

我的DQL查询需要解决该特定实现的实体类,该类别扩展了映射的超类。如果使用接口或映射的超类,我会得到符号错误。但是我不想使用我对超类名称的实现,因为这意味着我必须为每个项目更改便携式捆绑包的存储库代码,这是不可接受的。

其中一个想法是从存储库中的配置中获取ORM映射,并在此处注入正确的类。但是我找不到从配置文件中提取该信息的方法。

另一个更好,一个是创建某种侦听器,这将用真实的东西代替界面。

所以我的问题:有人知道这是否是不解决DQL的通常行为?有人有什么想法,我将如何实施我自己实现决议的代码?

任何信息都将不胜感激。

我假设您将混凝土类设置为参数,您以后在父捆绑包中访问。如果是这样,您可以为该类创建一个存储库(一半从Sylius复制)。

parameters:
    acme.repository.something.class: DoctrineORMEntityRepository
    // Or your custom repository
services:
    acme.manager.something:
        alias: doctrine.orm.entity_manager
    acme.metadata.something:
        class: DoctrineORMMappingClassMetadata
        factory_service: acme.manager.something
        factory_method: getClassMetadata
        arguments:
            - %acme.model.something.class%
    acme.repository.something:
        class: %acme.repository.something.class%
        arguments:
            - @acme.manager.something
            - @acme.metadata.something

然后,您只需使用$this->container->get('acme.repository.something)调用存储库`

andrej,我的情况相似。您可以在自定义存储库中制作一个设置器方法,该方法设置要在DQL中使用的类名称。然后,您可以在服务声明中使用该设置器方法,并带有呼叫标签。

这是我在邮政回购服务声明中所做的。我希望它有帮助。祝你好运。

    <service id="cfs_blog.post_repository" 
        class="%cfs_blog.post_repository.class%"
        factory-service="doctrine.orm.entity_manager"
        factory-method="getRepository">
        <argument>%cfs_blog.post.class%</argument>
        <call method="setUserEntityClass">
            <argument>%user_class%</argument>
        </call>
    </service>

相关内容

  • 没有找到相关文章

最新更新