symfony2.8

时间:2016-07-14 00:22:33

标签: symfony orm doctrine-orm query-builder

我在创建查询以与数据库通信时遇到错误我没有找到解决方案

我创建了一个查询构建器,用于从名为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

2 个答案:

答案 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)

它可能会有所帮助