Столько перерыл, совсем не могу понять, пожалуйста подскажите.
Делаю запрос к базе данных на Drupal 8.9.12
Получаю:
Array
(
[0] => stdClass Object
(
[__CLASS__] => stdClass
)
[1] => stdClass Object
(
[__CLASS__] => stdClass
)
[2] => stdClass Object
(
[__CLASS__] => stdClass
)
$messages = $query->execute()->fetchAll();
Что дальше с этим делать?
Как получить сами данные?
Пожалуйста, подскажите, столько перерыл, но так и не нашел.
Комментарии
Для чего вы делаете запрос к базе? Что вы хотите получить?
Да все что угодно, мне просто понять как в новом для меня Друпале (я работал на 6ке и 7ке) сделать запрос и получить поля.
Я вот что делаю:
$query = Database::getConnection()->select('watchdog', 'w');
$query->fields('w', ['message']);
$query->condition('w.type', 'cron');
$messages = $query->execute()->fetchAll();
dpm($messages);
Для работы с сущностями в Д8/9 есть специальные сервисы. Необходимости вручную лезть в базу особо и нет
Пожалуйста, подскажите что за сервисы, где почитать?
Мне нужно сделать несколько своих модулей со своими таблицами.
Лучше вы опишите ваши задачи более точно и тогда мы сможем подсказать вам по существу.
Если очень нужно самому писать и читать в базу, то вот есть хорошая статья
Так я по этой статье и делаю, но получаю что писал выше.
В данный момент у меня задача следующая: вывести поля формы и что в них вводится добавить в базу.
Я вывел их в файле namespace Drupal\my_module\Form
И в функции public function buildForm(array $form, FormStateInterface $form_state) {
пытаюсь получить введеные строки из базы
Просто там форма ниже предыдущих строк, там нужно что бы выше были выведены уже существующе строки для редактирования и ниже пустая строка для добавления. Добавлять в базу получается, а вот вывести уже добавленные строки не получается. выводится какой то пустой запрос, а данные то как получить?
Просто в последней строке сделал это:
$output = $query->execute()->fetchAssoc();
И все заработало
Даже пошлый способ работает:
$result = db_query('SELECT * FROM {my_module} ORDER BY id')->fetchAssoc();
dpm($result);
Не подошел этот вариант, как получить данные если там ни одна строка?
Неужели никто не может подсказать? Вроде простой вопрос то!
Почему запрос:
$query = db_query("SELECT * FROM {node}");
$output = $query->fetchAll();
return $output;
Выдает:
Array
(
[0] => stdClass Object
(
[__CLASS__] => stdClass
)
[1] => stdClass Object
(
[__CLASS__] => stdClass
)
)
Как сами данные то получить?
Потому что по-умолчанию данные возвращаются в виде массива объектов, т.к. используется PDO::FETCH_OBJ стиль выборки. Подробнее можно почитать здесь https://www.php.net/manual/ru/pdostatement.fetch.php#refsect1-pdostateme...
Соответственно каждая строка представлена объектом, свойства которого соответствуют полям в выборке.
И чтобы обойти значения, не обязательно делать fetchAll(), можно сразу в цикле обходить результат, как-то так:
<?php
$result
= $query->execute();foreach ($result as $row) {
dpm($row->message);
} ?>
Если в выборке есть поле `message`
Огромное спасибо!
Вот просто что то тормознул!
А все просто же!
Дык энто... А что он должен выдавать вместо этого?
Налицо неспособность сформулировать проблему.
- Почему запрос?
- Что "почему запрос"?
- Ну почему запрос?
- Да что "почему запрос"?!
- Да неужели никто почему запрос?
- ... ?
Спасибо за гениальную помощч, но мне уже подсказали, менее гениальные люди!
Вот вы лучше этим людям трижды в пояс поклонитесь, чем ерничать. Потому что не каждый будет даже читать подобную феерию, а не то чтобы отвечать. И (простите) как-то с трудом верится, что (цитата) "Столько перерыл", поскольку PHP Data Objects (а-ля PDO-стиль выборки) используется как минимум с 7-й ветки, да и в целом информации по обработке рядов результата SQL-выборки в Сети - валом.
Спасибо