映射实体和另一个实体彼此不一致

问题描述 投票:0回答:1

我的实体之间的关系有问题。

我的第一个实体User#tickets:

class User 
{
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Ticket", mappedBy="user")
     */
    private $tickets;

}

我的第二实体票证#负责人:

class Ticket
{

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="tickets")
     */
    private $user;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="tickets")
     */
    private $responsible;
}

它给我一个映射错误:

[App \ Entity \ Ticket#responsible和App \ Entity \ User#tickets的映射相互不一致。

如果关联App \ Entity \ Ticket#responsible是多对多的,那么反面的App \ Entity \ User#tickets也必须是多对多的。

但是这些字段都是ManyToMany

php symfony doctrine-orm doctrine
1个回答
0
投票

如果关系的一侧是ManyToOne,则关系的另一侧必须是OneToMany

您从票证到用户有两种关系。一个是ManyToOne,您的映射似乎在说:User可能有许多Ticket

Ticket::$user的这一面似乎很好:

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="tickets")
 */
private $user; 

但是反比关系是错误的是错误的。它是ManyToMany,但指向ManyToOne

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Ticket", mappedBy="user")
 */
private $tickets;

[您也有ManyToManyTicket变为User,但是您试图使用相同的属性来逆转关系,这没有意义。

如果要映射Ticket::$responsible的反面,则需要向User添加另一个属性。

例如:

// User entity
/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Ticket", mappedBy="responsible")
 */
private $tickets_responsibility;
// Ticket entity
/**
 * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="tickets_responsibility")
 */
private $responsible;
© www.soinside.com 2019 - 2024. All rights reserved.