创建QueryBuilder以查找字段ManuToMany

时间:2015-07-14 07:09:39

标签: php mysql symfony doctrine-orm

我有实体Devekoper,我需要找到开发人员谁有密码,谁有新的参考,我怎么做我不知道:

    /**
    * Developers.
    *
    * @ORM\Table(name="developers")
    * @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\DeveloperRepository")
    */
    class Developer extends CustomUser
    {
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     protected $id;

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


/**
 * @ORM\ManyToMany(targetEntity="Artel\ProfileBundle\Entity\CodeUserReference", inversedBy="alluser")
 */
protected $newreference;

我在用户

的字段代码引用setreference中有实体CodeUserReference
 class CodeUserReference
 {
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="Artel\ProfileBundle\Entity\Developer", inversedBy="newreference")
 */
protected $alluser;

/**
 * @ORM\Column(type="string", length=255)
 */
protected $codereference;

/**
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(type="datetime")
 */
protected $created_at;

我想找到所有参考谁没有参考的开发者。我试试:

    public function getDevelopersWithRefernce()
{
    $qb = $this->getEntityManager()->createQueryBuilder('d');

    $qb
        ->select('d')
        ->from('ArtelProfileBundle:Developer', 'd')

        ->addSelect('COUNT(m.id) as nMethods')
        ->join('d.newreference', 'm')
        ->groupBy('d.id')
        ->orderBy("nMethods", 'DESC')

        ->getQuery();
    $query = $qb->getQuery();
    $results = $query->getResult();

    return $results;
}

我有错误SQLSTATE [42S02]:找不到基表或视图:1146表'artel.developer_codeuserreference'不存在。我需要找到有参考或没有参考的开发人员。帮助

1 个答案:

答案 0 :(得分:1)

它告诉你,CodeUserReference的表格不存在

所以

->join(d.newreference, 'm')

不起作用。

你能告诉我们CodeUserReference类的标题吗?

您是否已完成迁移以将此表添加到数据库中?

检查此命令是否创建具有差异的文件: doctrine:migrations:diff

public function getDevelopersWithRefernce()
{
    $qb = $this->getEntityManager()->createQueryBuilder('d');

    $qb
        ->select('d')
        ->from('ArtelProfileBundle:Developer', 'd')
        ->leftJoin('d.newreference', 'm')
        ->where('m.codereference IS NULL')
        ->andWhere('d.password IS NULL')

        ->getQuery();
    $query = $qb->getQuery();
    $results = $query->getResult();

    return $results;
}