当我执行方法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 个参数才能运行,传递数组并不能让你立即看到函数需要什么