symfony2.8 中的查询生成器

query builder in symfony2.8

我在创建与数据库通信的查询时遇到错误我没有找到

的解决方案

我创建了一个查询生成器来从 table 中检索名为 Devis 的数据。这是我的代码:

<?php

namespace DevisBundle\Repository;

use Doctrine\ORM\EntityRepository;

/**
 * DevisRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class DevisRepository extends EntityRepository {

    public function byDevis($user_id,$enterprise_id)
    {
        $qb = $this->createQueryBuilder('u')
                ->select('u')
                ->where('u.user_id = :user_id AND u.enterprise_id = :enterprise_id ')
                ->setParameter('user_id',$user_id)
                ->setParameter('enterprise_id', $enterprise_id);
        return $qb->getQuery()->getResult();
    }

}

然后我在控制器里写了

$existed_devis = $em->getRepository('DevisBundle:Devis')->byDevis($user_id,$article->getEntreprise()->getId());

错误是:

[Semantical Error] line 0, col 49 near 'user_id = :user_id': Error: Class DevisBundle\Entity\Devis has no field or association named user_id 

这是我的数据库截图 enter image description here

你忘记了 ->from()

并且...在 DQL 中您需要使用 属性 名称而不是数据库字段名称。 我认为,您的实体看起来像这样:

class Devis 
{

    /**
      * @ORM\ManyToOne(targetEntity = 'User')
      */
    private $user;
    /**
      * @ORM\ManyToOne(targetEntity = 'Enterprise')
      */
    private $enterprise;

}

因此,您的存储库在这种情况下可能如下所示:

class DevisRepository 扩展了 EntityRepository {

public function byDevis(User $user, Enterprise $enterprice)
{
    $qb = $this->createQueryBuilder('u')
            ->select('d')
            ->from('Devis d')
            ->where('d.user = :user AND d.enterprise = :enterprise')
            ->setParameter('user', $user)
            ->setParameter('enterprise', $enterprise);
    return $qb->getQuery()->getResult();
}

}

P.S。如果您尝试通过 id 从 Users 获取用户,这样做更容易:

$user = $this->get('doctrine')->getRepository('YourBundle:User')->find($userId);
if ($user && $user->getEnterprise() == $enterprise) {
    // do smth.
}

祝你好运!

尝试

->setParameter('u.user_id',$user_id)

而不是

->setParameter('user_id',$user_id)

可能会有帮助