Когда я выполняю метод 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() не распознается?
ManseUK - хороший вопрос :) Хотелось бы увидеть полный код
@ManseUK Я обновляю вопрос с помощью $ this-> mysql
@ Angel115 обновил мой ответ - $results = $qb->execute->fetchAll();






Просто делать
$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.
что такое
$this->mysql?