【问题标题】:symfony, sonta user bundle, many to manysymfony,sonta 用户包,多对多
【发布时间】:2024-05-02 12:30:02
【问题描述】:

我正在做一个小项目,我在其中使用 Sonata 用户包来轻松管理我的用户。

但我有另一个实体,名为 order。在此实体中与一个用户相关联。 我在哪里写 manyToOne 注释?

谢谢 最好的问候

【问题讨论】:

    标签: php symfony sonata-admin symfony-sonata sonata-user-bundle


    【解决方案1】:

    如果您使用的是 Sonata admin,那么您可以使用 EASYEXTENDS BUNDLE 轻松扩展其核心捆绑包,它将生成一个子捆绑包,例如

    php app/console sonata:easy-extends:generate SonataUserBundle -d src Reference

    SonataUserBundle 扩展包后,您可以在子包的实体或其学说配置文件中指定您的关系

    <?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="Application\Sonata\UserBundle\Entity\User" table="fos_user_user">
            <id name="id" column="id" type="integer">
                <generator strategy="AUTO" />
            </id>
            <one-to-many  field="orders" target-entity="Order" mapped-by="user" />
        </entity>
    </doctrine-mapping>
    

    在你的用户实体中

    use Doctrine\Common\Collections\ArrayCollection;
    use Sonata\UserBundle\Entity\BaseUser as BaseUser;
    class User extends BaseUser
    {
        protected $orders;
        public function __construct()
        {
            $this->orders= new ArrayCollection();
        }
    //.. Getter and setter
    }
    

    在您的订单实体中添加映射以指向用户实体

    class Order
    {
        protected $user;
    }
    

    为了学说配置文件定义映射到用户实体

    <many-to-one  field="user" target-entity="User" inversed-y="orders" join-column="user_id">
    

    如果您使用注解,您可以从Docs 找到等效映射

    【讨论】:

    • 非常感谢,有了这些信息,我不仅可以做到这一点,还可以了解我的奏鸣曲用户包的许多其他内容!