Как я могу сделать много запросов с Doctrine в Symfony2

0

Я хотел бы знать, сколько "afiliados" имеют одну "Кампану",

Каким должен быть запрос?

Мои занятия:

<?php


namespace Axonsystem\Bundles\CampanaBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="afiliado")
 */
class Afiliado
{

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255,nullable=true)
 */
private $name;


/**
 * @ORM\ManyToMany(targetEntity="Campana", inversedBy="afiliados")
 * @ORM\JoinTable(name="afiliado_campana")
 *
 */
protected $campanas;


..........

/**
 * @ORM\Entity
 * @ORM\Table(name="campana")
 */
class Campana {


/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;


/**
 * @ORM\ManyToMany(targetEntity="Afiliado", mappedBy="campanas",cascade={"persist"})
 *
 */
protected $afiliados;


..............

Я забрал сеттеров и геттеров и некоторые атрибуты, так что контент становится проще.

  • 0
    Ваша проблема - синтаксис и контроллер БД или сам SQL?
Теги:
orm
doctrine
doctrine2

2 ответа

0
Лучший ответ

Для выполнения этого запроса вам необходимо использовать QueryBuilder. Я рекомендую создать репозиторий для Entity Afiliado, а в книжках - что-то вроде этого:

<?php

namespace Axonsystem\Bundles\CampanaBundle\Entity\Repository;

use Doctrine\ORM\EntityRepository;

class AfiliadoRepository extends EntityRepository
{
    public function countByCampana($campanaId) {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('COUNT(a.id)')
            ->from('CampanaBundle:Afiliado', 'a')
            ->innerJoin('CampanaBundle:Campana', 'c', 'WITH', 'c.id = a.campanas')
            ->where('c.id = :campanaId')
            ->setParameter('campanaId', $campanaId)
            ->getQuery()
            ->getSingleScalarResult();
    }
}
  • 0
    Большое спасибо за поддержку. Я собираюсь попробовать это. Я думаю, что это будет работать!
0

Используя построитель запросов, я думаю, что что-то вроде этого:

$qb->select("COUNT(f) as num_afiliados")
    ->from('CampanaBundle\Entity\Campana', 's')
    ->innerJoin('s.afiliados', 'f')
    ->where('s.id=:id')
    ->setParameter('id',$id);

$ id содержит идентификатор campana, который вы хотите узнать о количестве afiliados.

ОБНОВИТЬ

если вы хотите получить имя afiliados

$qb->select("f.name")
        ->from('CampanaBundle\Entity\Campana', 's')
        ->innerJoin('s.afiliados', 'f')
        ->where('s.id=:id')
        ->setParameter('id',$id);

если вы работаете с Symfony, просто адаптируйте запрос. Предположим, что вы находитесь в контроллере:

$ret = $this->getDoctrine()->getEntityManager()->createQueryBuilder()
                ->select("f.name")
                ->from('CampanaBundle:Campana', 's')
                ->innerJoin('s.afiliados', 'f')
                ->where('s.id=:id')
                ->setParameter('id', $id)
                ->getQuery()
                ->getResult();
  • 0
    Теперь, если я хочу знать имена аффилиатов, как мне сделать запрос?
  • 0
    @ user3690919 проверьте обновление.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню