Неопределенный метод Doctrine QueryBuilder getQuery ()

Когда я выполняю метод getMachineSettings, я получаю сообщение об ошибке:

Fatal error: Uncaught Error: Call to undefined method Doctrine\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() не распознается?

что такое $this->mysql?

Manse 11.04.2018 11:12

ManseUK - хороший вопрос :) Хотелось бы увидеть полный код

Krzysztof Raciniewski 11.04.2018 11:15

@ManseUK Я обновляю вопрос с помощью $ this-> mysql

Angel115 11.04.2018 11:41

@ Angel115 обновил мой ответ - $results = $qb->execute->fetchAll();

Manse 11.04.2018 11:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
3 157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто делать

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

Не обращайте внимания на приведенное ниже - предполагается, что вы используете ORM Doctrine, а не

Проблема, с которой вы работаете, заключается в том, что объект QueryBuilder, с которым вы работаете, не является Doctrine ORM QueryBuilder - это DBAL QueryBuilder.

Вам необходимо использовать функцию createQueryBuilder от EntityManager.

/** @var Doctrine\ORM\QueryBuilder $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 параметра, передача массива не позволяет сразу увидеть, что требуется функции.

$ results = $ qb-> execute () -> fetchAll (); работает нормально. Большое спасибо за уделенное время ManuseUK.

Angel115 11.04.2018 12:00

Другие вопросы по теме