从静态drupal7查询到动态查询

ncgqoxb0  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(335)

我需要取代理人的姓名,计数(身份证),国际单项体育联合会代码,地区代码。
使用静态查询时,一切正常:

$result = db_query('SELECT agent_name, count(id) as count, ifs_code, area_code FROM declarations WHERE fisccode = :idno GROUP BY agent_name', array(':idno' => $fisccode))->fetchAll();

此查询的结果:

/report5.inc:82: array (size=1) 0 => object(stdClass)[10] public 'agent_name' => string 'GHEOLARIS S.A' (length=13) public 'count' => string '3' (length=1) public 'ifs_code' => string '02' (length=2) public 'area_code' => string '0110' (length=4)

但是我不明白如何在动态查询中把count(id)作为count。
我试试这个:

$result = db_select('declarations', 'd')
      ->fields('d', array('agent_name', 'ifs_code', 'area_code'))
      ->addExpression('COUNT(id)', 'count') // I THINK I DO SOMETHING WRONG ON THIS LINE
      ->condition('fisccode', $fisccode)
      ->groupBy('agent_name')
      ->range($context['sandbox']['progress'], 10);
$result->execute()->featchAll();

addexpression打破了所有的,在这一行之后phpstorm给我这个警告:在字符串中找不到方法'condition'
在drupal日志中,我有一个错误:调用字符串上的成员函数condition()
请帮帮我!!!

tv6aics1

tv6aics11#

我认为问题是不是所有的数据库api函数都可以链接。请提供一个通读数据库api链接,说明:
无法链接的函数:
addExpression() addField() addJoin() extend() innerJoin() join() leftJoin() rightJoin() 您共享的错误也表明了这一点,因为它似乎 condition() 使用后的错误 addExpression() 不会返回数据库对象。
因此,对于动态查询,最好准备一个 $query 在赋值给 $result :

$query = db_select('declarations', 'd');
$query->fields('d', array('agent_name', 'ifs_code', 'area_code'));
$query->addExpression('COUNT(id)', 'count');
$query->condition('fisccode', $fisccode);
...
$result = $query->execute()->featchAll();

相关问题