猿问

显示表单 EntityType::class 用户列表 - 保存 @OneToMany - 错误

使用 Symfony 4.1,Doctrine 2.x,我有三个实体。一个订阅可以分配多个身份(也称为用户帐户)。当保存哪些身份属于屏幕上当前可见的订阅时(通过标准 Symfony 表单),它会失败。


身份.php


class Identity implements UserInterface, \Serializable, InteractiveLoginUserInterface

{

    /**

     * @var int

     *

     * @ORM\Column(type="integer")

     * @ORM\Id

     * @ORM\GeneratedValue(strategy="AUTO")

     */

    private $id;


    /**

     * @var string|null

     *

     * @ORM\Column(type="string", length=255, unique=true)

     * @Assert\NotBlank()

     * @Assert\Email()

     * @Assert\Length(max="255")

     */

    public $username;

订阅.php


class Subscription

{

    /**

     * @ORM\Column(type="integer")

     * @ORM\Id

     * @ORM\GeneratedValue(strategy="AUTO")

     */

    public $id;

    /**

     * @var bool

     * @ORM\Column(type="boolean")

     */


    /**

     * @var Collection

     * @ORM\OneToMany(targetEntity="SubscriptionIdentity", mappedBy="subscription", fetch="EAGER")

     */

    public $identities;

SubscriptionIdentity.php


class SubscriptionIdentity

{

    /**

     * @var int

     *

     * @ORM\Column(type="integer")

     * @ORM\Id

     * @ORM\GeneratedValue(strategy="AUTO")

     */

    private $id;


    /**

     * @ORM\ManyToOne(targetEntity="Subscription", inversedBy="identities")

     * @ORM\JoinColumn(name="subscription_id", referencedColumnName="id", nullable=false)

     */

    public $subscription;



    /**

     * @ORM\ManyToOne(targetEntity="Identity", inversedBy="subscriptions")

     * @ORM\JoinColumn(name="identity_id", referencedColumnName="id", nullable=true)

     */

    public $identity;


请帮忙!Symfony / Doctrine 文档在这种情况下并没有太大帮助。谢谢。


慕田峪7331174
浏览 118回答 1
1回答

30秒到达战场

您收到此错误是因为您尝试将类型的对象分配Identity给一个属性,其中学说等待 un object off type SubscriptionIdentity。您在这里描述的是多对多关系。尝试像这样修改您的实体:class Subscription{    /**     * @ORM\Column(type="integer")     * @ORM\Id     * @ORM\GeneratedValue(strategy="AUTO")     */    public $id;    /**     * @var bool     * @ORM\Column(type="boolean")     */    /**     * @var Collection     * @ManyToMany(targetEntity="Identity")     * @JoinTable(name="subscription_identity",     *      joinColumns={@JoinColumn(name="subscription_id", referencedColumnName="id")},     *      inverseJoinColumns={@JoinColumn(name="identity_id", referencedColumnName="id")}     *      )     */    public $identities;cf:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html#many-to-many-unidirectional
随时随地看视频慕课网APP
我要回答