代码之家  ›  专栏  ›  技术社区  ›  Angel115

条令QueryBuilder未定义方法getQuery()

  •  3
  • Angel115  · 技术社区  · 8 年前

    当我执行该方法时 获取机器设置 我收到一个错误:

    致命错误:未捕获错误:调用未定义的方法原则\DBAL\Query\QueryBuilder::getQuery()

    $data 是关联数组:

    $data['param'] = 'ip';
    $data['value'] = '192.168.240.10';
    

    如果我更换 getQuery()->getResult() 具有 execute() ,则, $result 包含查询:

    SELECT * FROM machine WHERE ip = ?

    public function __construct()
    {
    
        try
        {
    
            $dbconf = parse_ini_file('.htLogin.ini');
            $config = new \Doctrine\DBAL\Configuration();
    
            $connectionParams = array
                (
                    'dbname'    => $dbconf['infoDb'],
                    'user'      => $dbconf['infoLogin'],
                    'password'  => $dbconf['infoPw'],
                    'host'      => $dbconf['infoHost'],
                    'driver'    => 'pdo_mysql',
                    'charset'   => 'utf8',
                    'driverOptions' => array
                        (
                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
                        )
    
                );
            $this->mysql = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
    
        }
        catch(PDOException $e)
        {
    
            echo $e -> getMessage();
    
        }
    
    
    public function getMachineSettings($data)
    {
        $qb = $this->mysql->createQueryBuilder();
        $qb->SELECT('*')
           ->FROM('`machine`')
           ->WHERE($data['param'] . ' = :value');
        $qb->setParameters(
                array
                (
                    ':value' => $data['value']
                )
            );
    
        $results = $qb->getQuery()->getResult();
    
    
        var_dump($result);
    
        return $result;
    
     }
    

    你知道为什么这个方法 getQuery() 是否未识别?

    1 回复  |  直到 8 年前
        1
  •  7
  •   David user10336229    5 年前

    就这么做吧

    $results = $qb->execute()->fetchAll();
    

    忽略以下内容-它假设您使用的是ORM原则,而您的

    你的问题是 QueryBuilder 您使用的对象不是ORM QueryBuilder原则,而是DBAL QueryBuilder。

    您需要使用 createQueryBuilder 来自的函数 EntityManager

    /** @var Doctrine\ORM\QueryBuilder $qb */
    $qb = $this->entityManager->createQueryBuilder();
    

    然后您可以使用 select / from etc方法,并获取可以运行的查询结果

    $qb->getQuery()->getResult()
    

    如果我要重写你的函数,我会这样写

    public function getMachineSettings(string $field, string $value)
    {
        $qb = $this->entityManager->createQueryBuilder();
        $qb->select('m')
           ->from('machine')
           ->where($field.' = :value');
        $qb->setParameter('value', $value);
        $results = $qb->getQuery()->getResult();
        var_dump($result);
        return $result;
    }
    

    然后您知道函数需要两个参数才能运行,传递数组并不能立即看到函数需要什么