Php 原则:获取我收藏的一个对象(关系多个双向随机)
我需要从我的收藏中得到一个特定的物品 目前,我有两个实体(有很多双向关系):Php 原则:获取我收藏的一个对象(关系多个双向随机),php,symfony,object,doctrine-orm,entity-relationship,Php,Symfony,Object,Doctrine Orm,Entity Relationship,我需要从我的收藏中得到一个特定的物品 目前,我有两个实体(有很多双向关系): 问答 使用者 在我的用户实体中,我有一个定义为ArrayCollection的board属性: /** * @ORM\ManyToMany(targetEntity="\MyNamespace\WebsiteBundle\Entity\Category", inversedBy="users", cascade={"remove"}) * @ORM\JoinTable(name="user_categories
- 问答
- 使用者
/**
* @ORM\ManyToMany(targetEntity="\MyNamespace\WebsiteBundle\Entity\Category", inversedBy="users", cascade={"remove"})
* @ORM\JoinTable(name="user_categories")
*/
private $categories;
public function __construct()
{
parent::__construct();
$this->categories = new ArrayCollection();
}
/**
* get Categories
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCategories()
{
return $this->categories;
}
在我的分类实体中,我有:
/**
* @ORM\ManyToMany(targetEntity="\MyNamespace\UserBundle\Entity\User", mappedBy="categories")
* @Exclude
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
/**
* get Users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
当我需要获取数据库中的所有类别时,我会这样处理:
$user = $this->getUser();
$categories = $user->getCategories()
\Doctrine\Common\Util\Debug::dump($categories) // OK: Result is the categories belonging to the user
public function findOneUserCategoryById($user_id, $board_id)
{
$query = $this->getEntityManager()
->createQuery('
SELECT c FROM WebsiteBundle:Category c
JOIN c.users u
WHERE u.id = :user_id AND c.id = :category_id'
)
->setParameters(array(
'user_id' => $user_id,
'category_id' => $category_id)
);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
$em = $this->getDoctrine();
$category = $em->getRepository("WebsiteBundle:Category")
->findOneUserCategoryById(1, 5);
但是现在我只想检索类别名为“Sport”的用户的类别。 我该怎么做?我必须使用QueryBuilder,不能直接通过我的对象 最后,我只想在$user->getBoards()中添加一个条件
谢谢你的帮助 我肯定会选择查询生成器,但我认为你可以通过过滤器实现你想要的内容,这有点棘手,但这是一份文档,希望它能有所帮助。最后,我在我的分类报告中创建了一个方法,如下所示:
$user = $this->getUser();
$categories = $user->getCategories()
\Doctrine\Common\Util\Debug::dump($categories) // OK: Result is the categories belonging to the user
public function findOneUserCategoryById($user_id, $board_id)
{
$query = $this->getEntityManager()
->createQuery('
SELECT c FROM WebsiteBundle:Category c
JOIN c.users u
WHERE u.id = :user_id AND c.id = :category_id'
)
->setParameters(array(
'user_id' => $user_id,
'category_id' => $category_id)
);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
$em = $this->getDoctrine();
$category = $em->getRepository("WebsiteBundle:Category")
->findOneUserCategoryById(1, 5);
这项工作很好,我使用这种方法:
$user = $this->getUser();
$categories = $user->getCategories()
\Doctrine\Common\Util\Debug::dump($categories) // OK: Result is the categories belonging to the user
public function findOneUserCategoryById($user_id, $board_id)
{
$query = $this->getEntityManager()
->createQuery('
SELECT c FROM WebsiteBundle:Category c
JOIN c.users u
WHERE u.id = :user_id AND c.id = :category_id'
)
->setParameters(array(
'user_id' => $user_id,
'category_id' => $category_id)
);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
$em = $this->getDoctrine();
$category = $em->getRepository("WebsiteBundle:Category")
->findOneUserCategoryById(1, 5);
好啊我将尝试使用queryBuilder。谢谢你;)