Горячая использовать переменную в запросе в Drupal 8? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть этот код:

function my_module_test($key_make = '') {
  $db = new mysqli('xxx', 'xxx', 'xxx', "xxx");
  mysqli_set_charset($db, "UTF8");
  if ($key_make) {
    $sql_model = "SELECT * FROM `car_model` WHERE `id_car_make` = ('$key_make')";
    $res_model = $db->query($sql_model) or die(mysqli_error($db));
    while ($row = mysqli_fetch_object($res_model)) {
      $Key_model = $row->id_car_model;
      $Model_value = $row->name;

      $dropdown_model[$Key_model] = $Model_value;
    }
  }
  return $dropdown_model;
}

Как передать значение переменной $ key_make в WHERE clausole?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Сначала вам нужно использовать API базы данных Drupal для подключения к базе данных. Итак, мой окончательный код следующий, и он работает.

function car2db_model_dropdown_options($key_make) {
  $connection = Database::getConnection('default', 'migrate');
  $dropdown_model = ['_none'=>'Select'];
  $key_make = (int)$key_make;

  $sql_model = "SELECT * FROM car_model WHERE id_car_make = :make";
  $query = $connection->query($sql_model, [':make' => $key_make]);
  $result = $query->fetchAll();

  foreach ($result as $row) {
    $Key_model = $row->id_car_model;
    $Model_value = $row->name;

    $dropdown_model[$Key_model] = $Model_value;
  }
  return $dropdown_model;
}
0 голосов
/ 12 марта 2020

Функция запроса принимает второй параметр с массивом замещающих значений, поэтому вы должны сделать это следующим образом:

$sql_model = "SELECT * FROM {car_model} WHERE id_car_make = :make";
$res_model = $db->query($sql_model, [':make' => $key_make]);

Stati c запросы задокументированы здесь

Вы также можете использовать динамический c запрос (, задокументированный здесь ):

$query = $db->select('car_model', 'cm');
$query->fields('cm');
$query->condition('cm.id_car_make', $key_make);
$res_model = $query->execute();

Но ...
, если ваш " car_model - это пользовательские сущности (которые должны быть такими, поскольку вы получите много преимуществ, таких как интеграция представлений), вам, вероятно, следует использовать entityQuery

...