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)
可能会有帮助
我在创建与数据库通信的查询时遇到错误我没有找到
的解决方案我创建了一个查询生成器来从 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)
可能会有帮助