node_load или прямой запрос? - PullRequest
       0

node_load или прямой запрос?

2 голосов
/ 14 февраля 2011

Какое эмпирическое правило вы используете для принятия решения об использовании node_load() или просто написания прямого db_query()?

В ситуации, на которую я сейчас смотрю, мне нужно получить некоторые данные узла и разрешить данные в двух полях ссылки на узел. Так что это будет 3 звонка на node_load(). В какой-то момент здесь, было бы более эффективно создать запрос непосредственно с помощью Joins?

Это для использования в автономном модуле, который не будет распространяться или использоваться где-либо еще, поэтому я не думаю, что мне нужно беспокоиться о подрыве хуков модификации узла (или я?).

Изменить:
Если подумать о моем вопросе, то node_load() действительно применим, только когда вам нужно захватить один узел (а затем, возможно, углубиться в ссылки на узлы, как в моем примере). Но как только вам нужно вернуть более одного узла на основе некоторых критериев, вы в значительной степени вынуждены использовать db_query верно? Есть ли в Drupal какой-либо абстрактный API для написания таких запросов?

Ответы [ 2 ]

6 голосов
/ 14 февраля 2011

Не полный ответ (не уверен сам), только некоторые подсказки.

  • node_load () использует статический кеш (в Drupal 7 вы даже можете использовать модуль entity_cache, чтобы сделать его постоянным кешем). Если загружаемые вами узлы используются второй раз на той же странице, этот вызов будет бесплатным.

  • Запрашивать CCK-таблицы сложно. Структура схемы может полностью изменяться в зависимости от конфигурации, например, при использовании одного или нескольких значений.

2 голосов
/ 14 февраля 2011

Причина использования методов API для вызовов БД поверх прямых вызовов БД заключается в предоставлении уровня абстракции БД, чтобы ваше приложение могло перемещаться между поддерживаемыми ядрами баз данных и т. Д., А также оно позволяет вашему приложению корректно обрабатывать любые изменения схемы (хотя и маловероятно) это ядро ​​/ модуль может внести в рассматриваемые таблицы. Это также, вероятно, проще, как говорит @Berdir для полей CCK и полей Node_Ref, но это зависит от того, в чем вы более уверены в Drupal API и PHP или MySQL ... выигрыш от этого в Drupal - это повышение будущей производительности и понимания кодовой базы. и что возможно :) 1001 *

Да, и мое эмпирическое правило таково: делайте это по-Друпальски, если это возможно (возможно, зависит от времени приложения / стоимости / производительности / любых требований)

...