2010-03-21 4 views
7

Я довольно часто использую модуль Views Drupal для создания SQL, который я вставляю в свой код. Он хорошо понимает схему базы данных Drupal.Drupal Query builder

Есть ли модуль, который дал бы мне эту функциональность, или я могу опровергнуть это из представлений?

ответ

3

Было бы круто модуля Views был расширен для лучшей поддержки программного использования, но до тех пор вы не могли бы, возможно, хотите взглянуть на один из моих коллег попытки создать что-то похожее на такую ​​вещь: http://github.com/hugowetterberg/query_builder

, относящиеся к этому может быть попыткой проекта услуги по предоставлению данных Просмотров как сервис, усилие, которые мы прямо сейчас выделяя в собственный модуль: http://drupal.org/node/709100 Может стоить того, что потребуется определенный уровень программный доступ к Views.

Другой пример модуля, который обращающегося Просмотров программно является Семена развития Litenode: http://developmentseed.org/blog/2009/feb/4/litenode

Update 15/12-2010: EntityFieldQuery в Drupal 7, почти как с помощью программно Просмотров строить запросы - разница в том, что EntityQueryBuilder работает только с сущностями и полями, а также с бонусом, что он действительно может создавать запросы против любого типа используемого хранилища полей - например. базу данных NoSQL, такую ​​как MongoDB. Пример можно найти здесь: http://drupal4hu.com/node/267

0

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

Также вы можете прочитать схему таблиц и полей через: http://drupal.org/project/schema

1

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

$view = views_get_view('search'); 
$view->set_display('main'); 
$view->set_items_per_page(0); 
$view->execute(); 

$items = array(); 
foreach ($view->result as $row) { 
    $items[] = $row; 
} 

Таким образом, всякий раз, когда вы измените представления запроса , вам не нужно повторно копировать код. Я согласен с тем, что Views необходимо разделить на построение запроса api и пользовательский интерфейс.

+2

В версии 2.8 модуля views введена функция 'views_get_view_result ($ name, $ display_id = NULL)' для этого. –

0

Мне любопытно, почему вы использовали Views для создания SQL, а затем не используете Views?

Когда дело доходит до более сложных вещей, таких как отношения многих или многих, GROUP BY, COUNT, SUM, подзапросы и т. Д., Что бы ни требовала функция, лучше всего написать это самостоятельно (особенно, если модули Contrib не имеют поддержки видов, и вам нужно больше, чем таблица узлов).

Для меня, когда представления не могут быть выполнены, я пишу простой модуль, который вызывает hook_menu (для регистрации путей) с обратным вызовом, который выполняет запросы, которые мне нужны.

+0

Я думаю, вопрос о том, из каких таблиц drupal datas exctracted ... – Nikit

+0

Вы сами ответили на вопрос! «когда Views не может сделать это» – Rimian