web-dev-qa-db-ja.com

クエリに条件を追加するにはどうすればよいですか?

$acl_ids = array(1,2,3);
$database = \Drupal::database();

$result = $database
  ->query("SELECT {nid} FROM {acl_node} WHERE grant_update = :grant", 
    ['grant' => 1,])
  ->condition('acl_id', $acl_ids, 'in')
  ->fetchField();

残念ながら->condition次のエラーが発生するため、パーツが機能しません。

未定義のメソッドDrupal\Core\Database\Statement :: condition()の呼び出し

代わりにどの方法を使用する必要がありますか?

5
Alex

条件は動的クエリでのみ使用されます。 query()メソッドは、静的SQLを実行するためのものです。

動的バージョンは次のようになります。

$result = $database
  ->select('acl_node', 'n')
  ->fields('n', ['nid'])
  ->condition('grant_update', 1)
  ->condition('acl_id', $acl_ids, 'IN')
  ->execute()
  ->fetchField();

そして静的:

$result = $database
  ->query("SELECT nid FROM {acl_node} WHERE grant_update = :grant AND acl_id IN (:acl_ids[])", [':grant' => 1, ':acl_ids[]' => $acl_ids])
  ->fetchField();
13
Clive