Doctrine QueryBuilder undefined method getQuery()



当我执行方法getMachineSettings时,出现错误:

致命错误:未

捕获错误:调用未定义的方法 Doctrine\DBAL\Query\QueryBuilder::getQuery((

$data是一个关联数组:

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

如果我用 execute() 替换getQuery()->getResult()$result包含查询:

SELECT * FROM machine WHERE ip = ?

public function __construct()
{
    try
    {
        $dbconf = parse_ini_file('.htLogin.ini');
        $config = new DoctrineDBALConfiguration();
        $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 = DoctrineDBALDriverManager::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()方法不被识别吗?

只是做

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

忽略以下内容 - 它假设您使用教义 ORM,而您不是

您遇到的问题是,您使用的QueryBuilder对象不是Doctrine ORM QueryBuilder - 而是DBAL QueryBuilder。

您需要使用EntityManager中的createQueryBuilder功能。

/** @var DoctrineORMQueryBuilder $qb */
$qb = $this->entityManager->createQueryBuilder();

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

$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;
}

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

相关内容

  • 没有找到相关文章

最新更新