【问题标题】:Recommended way to add a new entity to sylius core bundle?向 sylius 核心捆绑包添加新实体的推荐方法?
【发布时间】:2015-01-20 00:56:40
【问题描述】:

目前使用: 用于电子商务网站的 sylius-standard 基础安装。

这是我想要完成的: 基本上我们知道有一个用户实体驻留在

vendor/sylius/sylius/src/Sylius/Component/Core/Model/User.php

这个实体实际上是在扩展 FOS\UserBundle\Model\User,它还有一个链接的 UserInterface,它正在实现 FOS\UserBundle\Model\UserInterface。

我的目标是创建另一个实体 UserData,它可以通过 Doctrine OneToMany 字段关系链接到上述 sylius 用户实体,它基本上是表 sylius_user。

如此有效地通过 oneToMany 链接到 UserData 实体的用户实体(对于每个用户可以有多个 UserData 实体实例。)

Sylius 文档 (http://sylius.readthedocs.org) 没有任何与添加实体相关的内容 - 如果我弄错了,请引导我找到正确的链接。

我已经在 -> sylius models override 阅读了覆盖模型,也已经在 stackoverflow How to create a new model with Sylius via SyliusResourceBundle 上遇到了另一种相关问题,但不清楚,因为他正在使用 SyliusResourceBundle 而我想扩展 SyliusCoreBundle(不确定是否我们可以先扩展它,也可以不扩展)

如何在 sylius 框架中实现这一点?

【问题讨论】:

    标签: entity-framework symfony doctrine-orm sylius


    【解决方案1】:

    我通过阅读隔离帖子解决了这些问题,因此将社区的解决方案放在这里(如果这不是推荐的方式,请告诉我,如果不是,请告诉我正确的方式):

    我的目标是在

    Sylius\Component\Core\Model\User
    

    Acme\Bundle\Entity\UserData
    

    我创建的。基本上,对于每个用户,都可能有多个 userdata 实例指向该用户。 为此,起初我遵循sylius documentation 的文档 覆盖 sylius 用户类,它实际上是 fosuserbundle 的扩展类。

    在某个阶段我不断收到错误[Doctrine\DBAL\Schema\SchemaException]
    The table with name 'astrohealing_dev.sylius_user' already exists.

    根据 Winzou 的建议:为了修复此错误,我更改了 sylius.yml (Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml) 中的用户类位置,它是核心捆绑包的一部分,并声明了我自己的像这样的用户模型类:

    这解决了 sylius_user 表存在错误

    但后来我又遇到了一个错误:

    [Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException]
    配置路径“sylius_core.driver”不能被覆盖。您必须为此路径定义所有选项,以及它的任何子
    -一个配置部分中的路径。

    接下来我注释掉了驱动器:相关条目的教义/orm 行

    app/config/config.yml
    
        sylius_core:
    #    driver: doctrine/orm
        classes:
            user:
                model: Acme\Bundle\Entity\User
                
    sylius_resource:
        resources:
            sylius.userdata:
                driver: doctrine/orm
                classes:
                    model: Acme\Bundle\Entity\UserData

    上面几行也显示:

    • 用我的新用户类覆盖 sylius_core
    • 新资源 - 基本上就是 userdata 类

    现在是教义映射(User.orm.xml):

    <?xml version="1.0" encoding="UTF-8"?>
    
    <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                                          http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    
        <entity name="Acme\Bundle\Entity\User" table="sylius_user">
            <one-to-many
                field="userdata"
                target-entity="Acme\Bundle\Entity\UserData"
                mapped-by="userid" />
        </entity>
    </doctrine-mapping>

    以及 UserData (UserData.orm.xml) 的映射

    <?xml version="1.0" encoding="UTF-8" ?>
    <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
            http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    
        <entity name="Acme\Bundle\Entity\UserData" table="sylius_userdata">
            <id name="id" type="integer">
                <generator strategy="AUTO" />
            </id>
            <many-to-one 
                field="userid" 
                target-entity="Acme\Bundle\Entity\User"
                inversed-by="userdata"
                join-column="userid">
                <join-column name="user_id" referenced-column-name="id" nullable="false" />
            </many-to-one>
    
            <field name="name" type="string" length="150" />
            <field name="datetime" type="datetime" />
        </entity>
    </doctrine-mapping>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      相关资源
      最近更新 更多