mysql原则,多对多关系问题

mctunoxg  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我有实体:用户和目录,相关关系(如下)。用户可以创建目录,然后与其他用户共享。我要搜索分配给用户的所有目录(即,他自己创建的目录和提供给他的目录)。

public function findAllCatalogForUser($id){
    return $this->createQueryBuilder('catalog')
        ->leftJoin('catalog.users','us')
        ->innerJoin('catalog.user','u')
        ->where('u.id = :id OR us.id =:id ') 
        ->setParameters([':id'=>$id])
        ->getQuery()
        ->getResult();
}

但是,在执行查询时,它会收到一个错误:
关联类型必须是\u to \u one或many to \u many之一
在我看来,表之间的关系是正确的,但我不能进行查询。如何解决这个问题?提前谢谢你的回答。
用户实体

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 * @UniqueEntity(fields="email", message="Ten email już istnieje, musisz użyć innego.")
 * @UniqueEntity(fields="username", message="Nazwa użytkownika już istnieje, musisz użyć innej.")
 */
class User implements AdvancedUserInterface, \Serializable
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=255, unique=true)
     * @Assert\NotBlank(message="Pole nie może być puste!")
     */
    private $username;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Catalog", inversedBy="user")
     * @ORM\JoinTable(name="user_catalog",
     *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="catalog_id", referencedColumnName="id")} )
     */
    protected $catalogs;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Catalog", mappedBy="user")
     */
    protected $catalog;

目录实体

/**
 * Catalog
 *
 * @ORM\Table(name="catalog")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CatalogRepository")
 */
class Catalog
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=100)
     */
    private $name;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="catalog")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="catalog")
     */
    protected $users;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();

    }
ssm49v7z

ssm49v7z1#

在用户实体中:

/**
 * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Catalog", inversedBy="users")
 * @ORM\JoinTable(name="user_catalog",
 *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="catalog_id", referencedColumnName="id")} )
 */
protected $catalogs;

在目录实体中:

/**
 * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="catalogs")
 */
protected $users;

相关问题