【问题标题】:How to access create query method in symfony repository如何访问 symfony 存储库中的创建查询方法
【发布时间】:2012-07-28 20:49:18
【问题描述】:

我有类用户存储库

class userRepository extends EntityRepository
{

    function getuserData($id)
    {
        $query = $this->createQuery('
                SELECT c FROM AcmeBundle:User c 
                WHERE c.id = :id ORDER BY c.id ASC
            ')
            ->setParameter('id', $id);

        return $query->getResult();
    }
}

我收到了这个错误

未定义的方法“createQuery”。方法名称必须以 findBy 或 findOneBy!

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    根据docs

    $em = $this->getEntityManager();
    $query = $em->createQuery('
            SELECT p FROM AcmeStoreBundle:Product p 
            WHERE p.price > :price 
            ORDER BY p.price ASC
        ')
        ->setParameter('price', '19.99');
    
    $products = $query->getResult();
    

    【讨论】:

    • 现在我收到此错误Call to a member function createQuery() on a non-object
    • 可能出现在别的地方
    • 对不起,我没明白你的意思
    • 这个错误可能出现在别的地方,不是$em-createQuery()
    • 不不,它只是在那里,如果我删除这些行,那么页面工作正常
    【解决方案2】:

    我知道这个答案已经很晚了,但是你的 userRepository 类需要在你的 User 实体中定义。

    use Doctrine\ORM\Mapping as ORM
    /**
     * @ORM\Entity(repositoryClass="NameOfBundle\Repository\UserRepository")
    class User
    {
        ...
    }
    

    【讨论】:

      【解决方案3】:

      当我们在存储库工作时

      $em = $this->getEntityManager(); //wont work in repository
      $em->createQueryBuilder($sql); 
      

      你必须使用

      $conn = $this->getEntityManager()->getConnection();     
      $stmt = $conn->prepare($sql);
      

      Read More

      【讨论】:

        【解决方案4】:

        方法CreateQuery属于Entity Manager,不是Controller的类

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多