Hi Jessica, Sorry, completely misunderstood the problem in first place.
Setting a limit on a query with fetch-joined results can only be done safely with the paginator: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/pagination.html Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/ On 29 May 2014 14:18, Jessica Mauerhan <[email protected]> wrote: > Hi Marco, thanks so much for the reply - unfortunately I still only get > one course instead of all of them. I also tried it using just the query as > you wrote it instead of converting it to the query builder, same result - > only 1 course. Here is my QueryBuilder code. > > $qb = $this->_em->createQueryBuilder(); > $q = $qb->select('category', 'courses') > ->from('models\Category', 'category') > ->innerJoin('category.courses', 'courses') > ->innerJoin('category.courses', 'courses_count') > ->groupBy('category.id', 'courses.id') > ->having('COUNT(courses_count.id) > 1'); > return $q->getQuery()->setMaxResults(1)->getOneOrNullResult(); > > > > On Tuesday, May 27, 2014 7:18:39 PM UTC-5, Jessica Mauerhan wrote: >> >> I have the following two entities, Courses and Categories. A course can >> be in multiple categories, and obviously a category can have multiple >> courses. So I have mapped this as a many-to-many. >> >> (I have removed much of the irrelevant code) >> >> *Category Model:* >> ** >> * models\Category >> * >> * @ORM\Table(name="item_category") >> * @ORM\Entity(repositoryClass="models\repositories\CategoryRepository") >> */ >> >> class Category{ >> >> /** >> * @var integer $id >> * >> * @ORM\Column(name="id", type="integer", nullable=false) >> * @ORM\Id >> * @ORM\GeneratedValue(strategy="IDENTITY") >> */ >> protected $id; >> >> /** >> * @var string $name >> * >> * @ORM\Column(name="name", type="string", length=100, nullable=false) >> * @Assert\NotBlank() >> */ >> protected $name; >> >> /** >> * @var ArrayCollection >> * >> * @ORM\ManyToMany(targetEntity="models\Course") >> * @ORM\JoinTable(name="item_category_assignment", >> * inverseJoinColumns={@ORM\JoinColumn(name="item_id", >> referencedColumnName="id")}, >> * joinColumns={@ORM\JoinColumn(name="item_category_id", >> referencedColumnName="id")} >> * ) >> */ >> protected $courses; >> >> public function __construct() >> { >> $this->courses = new ArrayCollection(); >> } >> } >> >> *Course Model:* >> >> /** >> * models\Course >> * >> * @ORM\Table(name="item") >> * @ORM\Entity(repositoryClass="models\repositories\CourseRepository") >> */ >> >> class Course{ >> >> /** >> * @var integer $id >> * >> * @ORM\Column(name="id", type="integer", nullable=false) >> * @ORM\Id >> * @ORM\GeneratedValue(strategy="IDENTITY") >> */ >> protected $id; >> >> /** >> * @var string $name >> * >> * @ORM\Column(name="name", type="string", length=100, nullable=false) >> * @Assert\NotBlank() >> */ >> protected $name; >> >> /** >> * @var ArrayCollection >> * @ORM\ManyToMany(targetEntity="models\Category", >> cascade={"persist"}) >> * @ORM\JoinTable(name="item_category_assignment", >> * joinColumns={@ORM\JoinColumn(name="item_id", >> referencedColumnName="id")}, >> * inverseJoinColumns={@ORM\JoinColumn(name="item_category_id", >> referencedColumnName="id")} >> * ) >> */ >> protected $categories; >> >> public function __construct() >> { >> $this->categories = new ArrayCollection(); >> } >> } >> >> >> In my *CategoryRepository, *I am trying to select just one category >> which has more than 1 course in it, and all of it's courses, in the same >> query. >> >> /** >> * Get a category that has multiple (>1) courses in it. >> * >> * @return \models\Category|null >> */ >> public function getOneWithCourses() >> { >> $qb = $this->_em->createQueryBuilder(); >> $q = $qb->select('category') >> ->from('models\Category', 'category') >> ->innerJoin('category.courses', 'courses') >> ->having('COUNT(courses.id) > 1'); >> return $q->getQuery()->*setMaxResults(1)*->getOneOrNullResult(); >> } >> >> If I do: $q = $qb->select('category', *'courses'*), then I get one >> category and only ONE of the courses. It only gets all of the courses if I >> do not select the courses, and just rely on lazy-loading. >> >> Is there a way to do this in one query, or is this really the right way >> to do it? >> > -- > You received this message because you are subscribed to the Google Groups > "doctrine-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/doctrine-user. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "doctrine-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/doctrine-user. For more options, visit https://groups.google.com/d/optout.
