【问题标题】:Symfony3 Doctrine querybuilderSymfony3 学说查询构建器
【发布时间】:2016-08-01 11:32:07
【问题描述】:

我正在使用 Doctrine ORM 编写 Symfony3 应用程序。

我有一个包含我所有属性及其设置器和获取器的实体。

尝试构建以便我可以根据电子邮件地址检索行。

my query:

      /**
     * @param $email
     */
    public function getUserByEmail($email)
{
    $repository = $this->db->EntityManagerORM()
        ->getRepository('TestBundle:User');

    $query = $repository->createQueryBuilder('t')
        ->where('t.emial = :email')
        ->setParameter(':email', $email)
        ->getQuery();

    $test = $query->getResult();

    var_dump($test);
  1. $this->db 是一个 EntityManager,它是一个服务并在我的 __construct 中实例化。所以我要做的是检索实体,他们创建了一个 queryBuilder,我想在其中检索电子邮件 == 到给定电子邮件的整行。

    我得到的回复:

    "Notice: Undefined index: [Semantical Error] line 0, col 63 near 'emial
    

    = :ema': 错误:类 Test\TestBundle\Entity\User 没有字段或

    名为 emial 的协会

我的代码中有什么可疑之处......?

【问题讨论】:

    标签: php doctrine symfony


    【解决方案1】:

    这是电子邮件的拼写。改为:

    $query = $repository->createQueryBuilder('t')
          ->where('t.email = :email')
          ->setParameter(':email', $email)
          ->getQuery();
    

    这应该可以解决问题。

    【讨论】:

    • 天啊,我感到有点尴尬:P 但感谢您发现它。这是唯一的问题。
    • 没问题,我们通常需要另一个人来帮助我们查看代码。
    【解决方案2】:

    setParameter 函数中不需要:。

    您的代码中的另一个错误是,User 表没有名称为 emial 的列。仔细检查并用适当的名称替换它。

    所以你的查询看起来像这样,

    $query = $repository->createQueryBuilder('t')
            ->where('t.RIGHT_COLUMN_NAME = :email')
            ->setParameter('email', $email)
            ->getQuery();
    

    在上面的代码中,用正确的列名替换RIGHT_COLUMN_NAME。

    【讨论】:

    • and : 我只是添加 to 以区分 table.column 中的参数,因此代码更具可读性
    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 2011-11-15
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多