Рейтинг:0

Получить путь (псевдоним) из запроса SQL

флаг in

У меня есть SQL-запрос, чтобы получить все узлы с их идентификатором, заголовком, датой публикации, датой изменения и т. д.

Кроме того, мне нужно получить путь к каждому из них (вероятно, из path_alias.alias).

Теперь у меня есть следующее (без псевдонима):

ВЫБЕРИТЕ MIN(node_field_data.nid) КАК nid,node_field_data.type, node_field_data.status, node_field_data.title, node_field_data.langcode КАК node_field_data_langcode, node_field_data.created, node_field_data.changed
ОТ
node_field_data
Узел INNER JOIN ON node_field_data.nid = node.nid
СГРУППИРОВАТЬ ПО node.nid, node_field_data.changed, node_field_data_langcode
ORDER BY node_field_data.nid DESC;

Любая идея, как это получить?

флаг cn
В качестве быстрого и грязного способа получения запросов вы можете создать представление, которое делает то, что вы хотите, а затем включить «показать запрос SQL» в параметрах администратора представлений.
флаг in
да, это то, что я сделал, но немного расширил этот запрос, так как мне нужно сохранить результаты в CSV... Представления, дающие немного другой запрос, чем мне нужно
Рейтинг:2
флаг in

Если вы хотите получить доступ к сущностям Drupal, вам следует использовать EntityTypeManager's получить хранилище () метод для возврата контроллера хранилища для узлов:

// Получить ссылку на обработчик хранилища для узлов.
$node_storage = \Drupal::entityTypeManager()->getStorage("узел");
// Загружаем произвольный узел, указанный в переменной $nid.
$node = $node_storage->load($nid);

Поскольку узел является типом объекта контента, у вас будет весь API, как определено Друпал\узел\НодеИнтерфейс, работать с. Это включает в себя возможность вызова:

// Получить внутренний путь, псевдоним пути, если он существует, для объекта.
$node->toUrl()->toString();

Для получения дополнительной информации о том, как работать с сущностями в Drupal, см. этот пост, из которого я позаимствовал приведенный выше пример: https://www.drupal.org/docs/drupal-apis/entity-api/working-with-the-entity-api

флаг in
Мне это не нужно, этот запрос будет работать вне Drupal, как видите, это прямой SQL-запрос.
флаг in
Я понимаю полностью. :) Как оказалось, лучше всего использовать слой сущностей для управления, запроса и редактирования сущностей в Drupal.Обходя назначенные подсистемы, вы будете вести тяжелую битву, в которой вам, вероятно, все равно придется загружать сущности Node, чтобы достичь того, о чем вы просите. Кроме того, такие вещи, как значения внутренних свойств и имена таблиц, не считаются гарантированными и могут неожиданно измениться. API гарантирован; реализации нет.
apaderno avatar
флаг us
В Drupal 8 псевдонимы путей теперь также являются сущностями. Даже если бы узлы и псевдонимы путей не были сущностями, всегда было бы лучше использовать существующий API, а не напрямую запрашивать базу данных Drupal. Drupal также может предоставлять REST API, что позволяет запрашивать объекты, не зная никаких подробностей о том, какие таблицы базы данных используются для этой цели или какие поля содержат эти таблицы.
apaderno avatar
флаг us
Да, я бы предпочел запустить PHP-код для выполнения этой задачи, чем запрашивать базу данных с терминала MySQL. Это требует начальной загрузки Drupal, если код PHP предназначен не для модуля Drupal, а является внешним скриптом, который обращается к данным Drupal. (Это внешнее с точки зрения Drupal.) В качестве альтернативы я бы использовал реализации REST API Drupal, если информация необходима в коде, который не написан на PHP.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.