php - 创建 QueryBuilder 以查找字段 ManuToMany

标签 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;

我在用户的字段 codereference 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]: 未找到基表或 View : 1146 表 'artel.developer_codeuserreference' 不存在 。我需要找到有引用或没有引用的开发人员。帮助

最佳答案

这表明您 CodeUserReference 的表不存在

所以

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

不会起作用。

您能给我们看看 CodeUserReference 类的 header 吗?

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

检查此命令是否创建一个具有差异的文件: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;
}

关于php - 创建 QueryBuilder 以查找字段 ManuToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31399968/

相关文章:

php - 使用 PHP 连接到 Access

php - Javascript 似乎正在改变表单字段样式

php - PHP和Redis缓存

php - 如何使用filter_input获取参数数组?

java - 我在尝试连接到本地主机 phpmyadmin 时遇到错误

php - 如何在 Symfony 中解析这个 JSON 对象

php - 选择为空时显示所有条目的 Symfony2 实体字段

php - 将项目添加到复选框上的数组

php - MySQL查询以显示当前日期在顶部的记录,其他按降序显示

php - 如何更改 symfony 2 doctrine 映射器以使用我的自定义目录而不是包下的实体目录