我有实体:用户和目录,相关关系(如下)。用户可以创建目录,然后可以与其他用户共享。我想搜索分配给用户的所有目录(即他自己创建的目录和可供他使用的目录)。
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();
}
但是,执行查询时,会收到错误:
关联类型必须是_TO_ONE或MANY_TO_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();
}
答案 0 :(得分:2)
在您的用户实体中:
/**
* @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;