我在创建查询以与数据库通信时遇到错误我没有找到解决方案
我创建了一个查询构建器,用于从名为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
答案 0 :(得分:0)
您忘记了 - &gt;来自()
并且......在DQL中,您需要使用属性名称而不是数据库字段名称。 我想,你的实体看起来像这样:
class Devis
{
/**
* @ORM\ManyToOne(targetEntity = 'User')
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity = 'Enterprise')
*/
private $enterprise;
}
因此,在这种情况下,您的存储库可能如下所示:
类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从用户处获取用户,则更容易这样做:
$user = $this->get('doctrine')->getRepository('YourBundle:User')->find($userId);
if ($user && $user->getEnterprise() == $enterprise) {
// do smth.
}
祝你好运!
答案 1 :(得分:0)
尝试
->setParameter('u.user_id',$user_id)
而不是
->setParameter('user_id',$user_id)
它可能会有所帮助