学说,多对多关系问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学说,多对多关系问题相关的知识,希望对你有一定的参考价值。
我有实体:用户和目录,相关关系(如下)。用户可以创建目录,然后可以与其他用户共享。我想搜索分配给用户的所有目录(即他自己创建的目录和那些可供他使用的目录)。
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 OR MANY_TO_MANY之一
在我看来,表之间的关系是正确的,但我无法进行查询。如何解决这个问题?提前感谢您的回答。
用户实体
/**
* User
*
* @ORMTable(name="user")
* @ORMEntity(repositoryClass="AppBundleRepositoryUserRepository")
* @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
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="username", type="string", length=255, unique=true)
* @AssertNotBlank(message="Pole nie może być puste!")
*/
private $username;
/**
* @ORMManyToMany(targetEntity="AppBundleEntityCatalog", inversedBy="user")
* @ORMJoinTable(name="user_catalog",
* joinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="catalog_id", referencedColumnName="id")} )
*/
protected $catalogs;
/**
* @ORMOneToMany(targetEntity="AppBundleEntityCatalog", mappedBy="user")
*/
protected $catalog;
目录实体
/**
* Catalog
*
* @ORMTable(name="catalog")
* @ORMEntity(repositoryClass="AppBundleRepositoryCatalogRepository")
*/
class Catalog
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="name", type="string", length=100)
*/
private $name;
/**
* @ORMManyToOne(targetEntity="AppBundleEntityUser", inversedBy="catalog")
* @ORMJoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* @ORMManyToMany(targetEntity="AppBundleEntityUser", mappedBy="catalog")
*/
protected $users;
/**
* Constructor
*/
public function __construct()
{
$this->users = new DoctrineCommonCollectionsArrayCollection();
$this->user = new DoctrineCommonCollectionsArrayCollection();
}
答案
在您的用户实体中:
/**
* @ORMManyToMany(targetEntity="AppBundleEntityCatalog", inversedBy="users")
* @ORMJoinTable(name="user_catalog",
* joinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="catalog_id", referencedColumnName="id")} )
*/
protected $catalogs;
在您的目录实体中:
/**
* @ORMManyToMany(targetEntity="AppBundleEntityUser", mappedBy="catalogs")
*/
protected $users;
以上是关于学说,多对多关系问题的主要内容,如果未能解决你的问题,请参考以下文章