【问题标题】:Raw query on repository class using Symfony 3.4使用 Symfony 3.4 对存储库类进行原始查询
【发布时间】:2021-12-28 16:44:54
【问题描述】:

我需要在存储库类中创建一个原始查询,但我遇到了错误

class UserRepository extends EntityRepository
{
   public function usertoExpirate(){

     $query = 'SELECT email 
     FROM user 
     WHERE type NOT IN("deleted", "admin") 
     AND  expiration_date < DATE_ADD(NOW(),INTERVAL -3 MONTH)';
    
     $statement = $this->getConnection()->prepare($query);
     $statement->execute();
     $user_to_expirate_password = $statement->fetchAll();

     return $user_to_expirate_password;
}

我收到了这个错误

Undefined method 'getConnection'. The method name must start with either findBy, findOneBy or countBy!

【问题讨论】:

  • 好吧,让我们看看。未定义的方法错误消息强烈暗示该类没有具有该特定名称的方法。您可能对 find 的东西有点困惑,但这是因为存储库类实际上允许您在不添加实际方法的情况下执行 findByType 之类的操作。真的只是分心。那么如何获得连接呢?原来 EntityManager::getConnection 存在。我将把它作为阅读代码的练习,让您确定如何从存储库中获取实体管理器。

标签: php symfony symfony-3.4


【解决方案1】:

根据documentation of Symfony 3.4,您需要获取实体管理器,而不是连接。试试这样:

class UserRepository extends EntityRepository {
    public function usertoExpirate() {

        $query = 'SELECT email 
        FROM user 
        WHERE type NOT IN("deleted", "admin") 
        AND expiration_date < DATE_ADD(NOW(),INTERVAL -3 MONTH)';
   
        return $this->getEntityManager()
            ->createQuery($query)
            ->getResult();
}

【讨论】:

  • 获得实体管理器的想法是正确的,但您的代码混淆了 SQL 和 DQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2016-04-14
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多