Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 原则:获取我收藏的一个对象(关系多个双向随机)_Php_Symfony_Object_Doctrine Orm_Entity Relationship - Fatal编程技术网

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

我需要从我的收藏中得到一个特定的物品

目前,我有两个实体(有很多双向关系):

  • 问答
  • 使用者
在我的用户实体中,我有一个定义为ArrayCollection的board属性:

/**
 * @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。谢谢你;)