鑰匙要點
- > EntityFieldQuery是Drupal的一類,允許開發人員從數據庫中獲取有關實體的信息,而無需編寫SQL查詢,從而更容易檢索,過濾和排序數據。當需要從多個表獲取數據或要應用複雜條件到查詢時,這一點特別有用。 >
- >可以擴展EntityFieldQuery類以創建自己的子類,從而使您可以在多個位置構建相同的查詢。例如,您可能需要構建一個查詢,以以創建日期的上升順序獲得所有活躍的用戶。這可以通過創建一個擴展EntityFieldQuery並設置適當條件和順序的新類來實現。 >
- > EntityFieldQuery支持各種方法,例如從特定實體類型中獲取數據,``propertyCondition''用於添加基於實體屬性的條件的``propertyCondition'',用於從自定義字段獲取數據的fieldCondition和`forthConcondition''forthConcondition'和``fieldCondition''對結果進行排序。但是,它僅支持一次從一個實體類型中獲取數據。如果您需要從多個實體類型中獲取數據,則需要對每種類型運行單獨的查詢。
>
>構建複雜的Web應用程序時,您最終必須與數據庫進行交互。要檢索Drupal中的數據,可以使用提供的數據庫抽象層,這需要正確使用一些SQL知識。提供了Drupal 7 EntityFieldQuery API,可讓您在不實際構建SQL查詢的情況下獲取有關Drupal的實體的信息。在本文中,讓我們看看如何使用EntityFieldQuery API從Drupal獲取數據並在我們的模塊中使用。
> ENTITYFIELDQUERY類
> EntityFieldQuery類用於在Drupal中找到符合某些條件的實體。 EntityFieldQuery在您的Drupal安裝中的inclate/entity.inc文件中存在。
此類具有不同的方法來指定實體類型和基於某些條件,我們可以過濾我們要獲取的數據。在本文中,我們將詳細介紹這些方法。
首先,在使用EntityFieldQuery時將遵循的基本用法首先是創建此類的對象。創建對像後,您將為其添加一些條件,然後調用執行方法以獲取結果。
一般模板如下
>
>我們現在將創建一個Drupal模塊,該模塊將安裝3種新的Drupal節點類型:產品,電影和書籍以及一個將顯示結果的塊。您可以在本文中查看如何創建節點類型
模塊的代碼為<span>$entityquery = new EntityFieldQuery(); </span><span>/// Set some conditions </span><span>$result = $query->execute ();</span>entityquery.info
> entityquery.install
name <span>= entityquery </span>description <span>= Shows how to use entity query to fetch data from drupal </span>package <span>= Entity Query Example </span>core <span>= 7.x</span>
entityquery.module
<span>$entityquery = new EntityFieldQuery(); </span><span>/// Set some conditions </span><span>$result = $query->execute ();</span>
>將此模塊放入模塊文件夾中,如果一切順利,您將能夠在模塊列表中看到EntityQuery模塊,如下所示。
>使用EntityFieldQuery
>我們設置了用於使用EntityFieldQuery的基本模塊後,讓我們開始編寫一些查詢以從Drupal獲取數據。我們要寫的第一個查詢是使用EntityFieldQuery獲取所有節點。然後,我們將使用它在我們的塊中顯示節點的標題。 >
如前所述,第一件事是創建一個EFQ實例。要獲取一種類型的實體,您必須向其添加Entity_Type條件。在這種情況下,我們要獲取節點,以便其代碼如下:>
使用我們將實體類型設置為節點的函數實體條件設置實體條件。設置實體條件後,我們就可以執行查詢。節點ID在結果的節點密鑰中返回。顯示節點的完整代碼將如下:
>現在,如果您去看塊,則應該能夠看到其中的所有節點,如下所示
name <span>= entityquery </span>description <span>= Shows how to use entity query to fetch data from drupal </span>package <span>= Entity Query Example </span>core <span>= 7.x</span>
<span><span><?php </span></span><span><span>/** </span></span><span><span> * Implement hook_install(). </span></span><span><span> */ </span></span><span><span>function entityquery_install() { </span></span><span> <span>node_types_rebuild(); </span></span><span> <span>$types = node_type_get_types(); </span></span><span> <span>node_add_body_field($types['product']); </span></span><span> <span>node_add_body_field($types['movies']); </span></span><span> <span>node_add_body_field($types['books']); </span></span><span><span>}</span></span></span>>現在,您應該嘗試添加不同的節點,例如電影和書籍,並檢查它們在街區中顯示。在以上,代碼一旦我們獲得了EntityFieldQuery的節點ID,我們就會使用node_load_multiple加載節點並顯示它們。
>將實體條件添加到EntityFieldQuery
>您可以添加實體條件以僅顯示特定類型的節點。如果我們只想從節點類型中顯示“產品”,則我們將使用的查詢是:
現在,如果我們檢查塊,它將僅顯示產品:
我們甚至可以使用EntityCondition指定一系列節點類型來獲取多種類型的節點。從數據庫中獲取所有產品和電影:
<span><span><?php </span></span><span><span>/** </span></span><span><span> * Implement hook_node_info() </span></span><span><span> */ </span></span><span><span>function entityquery_node_info() { </span></span><span> <span>return array( </span></span><span> <span>'product' => array( </span></span><span> <span>'name' => t('Product'), </span></span><span> <span>'base' => 'product', </span></span><span> <span>'description' => t('You can define new Products here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Product title') </span></span><span> <span>), </span></span><span> <span>'movies' => array( </span></span><span> <span>'name' => t('Movies'), </span></span><span> <span>'base' => 'movies', </span></span><span> <span>'description' => t('You can define new Movies here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Movie title') </span></span><span> <span>), </span></span><span> <span>'books' => array( </span></span><span> <span>'name' => t('Books'), </span></span><span> <span>'base' => 'Books', </span></span><span> <span>'description' => t('You can define new Books here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Books title') </span></span><span> <span>) </span></span><span> <span>); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function product_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function movies_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function books_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_block_info(). </span></span><span><span> */ </span></span><span><span>function entityquery_block_info() { </span></span><span> <span>$blocks = array(); </span></span><span> </span><span> <span>$blocks['entityqueryblock'] = array( </span></span><span> <span>'info' => t('A block to display results from entityquery'), </span></span><span> <span>); </span></span><span> </span><span> <span>return $blocks; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_block_view(). </span></span><span><span> */ </span></span><span><span>function entityquery_block_view($block_name = '') { </span></span><span> <span>if ($block_name == 'entityqueryblock') { </span></span><span> <span>$content =''; </span></span><span> <span>$block = array( </span></span><span> <span>'subject' => t('A block to display results from entityquery'), </span></span><span> <span>'content' => $content, </span></span><span> <span>); </span></span><span> <span>return $block; </span></span><span> <span>} </span></span><span><span>}</span></span></span>
>將屬性條件添加到EntityFieldQuery
>我們甚至可以在查詢中添加屬性條件。這些取決於您要查詢的實體類型。在大多數情況下,屬性條件將在您要查詢的實體類型的字段上。例如,您可以查詢發布的節點,或者由特定用戶編寫等。
>
<span>$entityquery = new EntityFieldQuery(); </span><span>/// Set some conditions </span><span>$result = $query->execute ();</span>
>將現場條件添加到EntityFieldQuery並訂購
>場的條件特定於實體上存在的字段。因此,假設我們想找到所有具有折扣單詞折扣的產品 - 我們可以使用現場條件進行。我們甚至可以使用propertyOrderby函數訂購結果。
如果我們想要在其體內有“折扣”的產品和電影,以降序的創建順序排列,則查詢將如下:
name <span>= entityquery </span>description <span>= Shows how to use entity query to fetch data from drupal </span>package <span>= Entity Query Example </span>core <span>= 7.x</span>此查詢的輸出將如下
>
有時,您可能必須在許多地方構建相同的查詢。一種抽象的好方法,是擴展EntityFieldQuery類並創建自己的子類。
假設您想構建一個查詢以按其創建日期的升級順序獲取所有活躍用戶:
現在,您可以在任何地方使用此查詢:
<span><span><?php </span></span><span><span>/** </span></span><span><span> * Implement hook_install(). </span></span><span><span> */ </span></span><span><span>function entityquery_install() { </span></span><span> <span>node_types_rebuild(); </span></span><span> <span>$types = node_type_get_types(); </span></span><span> <span>node_add_body_field($types['product']); </span></span><span> <span>node_add_body_field($types['movies']); </span></span><span> <span>node_add_body_field($types['books']); </span></span><span><span>}</span></span></span>
結論
Drupal中的許多模塊都需要您從數據庫中獲取實體內容。可以直接使用Drupal數據庫層,但是為此,您必須至少具有SQL的工作知識,並且可能更容易出現錯誤。 EntityFieldQuery類是Drupal核心的一部分,您可以輕鬆地使用它,而無需依賴其他模塊。創建下一個Drupal模塊的樂趣!<span><span><?php </span></span><span><span>/** </span></span><span><span> * Implement hook_node_info() </span></span><span><span> */ </span></span><span><span>function entityquery_node_info() { </span></span><span> <span>return array( </span></span><span> <span>'product' => array( </span></span><span> <span>'name' => t('Product'), </span></span><span> <span>'base' => 'product', </span></span><span> <span>'description' => t('You can define new Products here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Product title') </span></span><span> <span>), </span></span><span> <span>'movies' => array( </span></span><span> <span>'name' => t('Movies'), </span></span><span> <span>'base' => 'movies', </span></span><span> <span>'description' => t('You can define new Movies here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Movie title') </span></span><span> <span>), </span></span><span> <span>'books' => array( </span></span><span> <span>'name' => t('Books'), </span></span><span> <span>'base' => 'Books', </span></span><span> <span>'description' => t('You can define new Books here'), </span></span><span> <span>'has_title' => TRUE, </span></span><span> <span>'title_label' => t('Books title') </span></span><span> <span>) </span></span><span> <span>); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function product_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function movies_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_form() </span></span><span><span> */ </span></span><span><span>function books_form($node, $form_state) { </span></span><span> <span>return node_content_form($node, $form_state); </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_block_info(). </span></span><span><span> */ </span></span><span><span>function entityquery_block_info() { </span></span><span> <span>$blocks = array(); </span></span><span> </span><span> <span>$blocks['entityqueryblock'] = array( </span></span><span> <span>'info' => t('A block to display results from entityquery'), </span></span><span> <span>); </span></span><span> </span><span> <span>return $blocks; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Implement hook_block_view(). </span></span><span><span> */ </span></span><span><span>function entityquery_block_view($block_name = '') { </span></span><span> <span>if ($block_name == 'entityqueryblock') { </span></span><span> <span>$content =''; </span></span><span> <span>$block = array( </span></span><span> <span>'subject' => t('A block to display results from entityquery'), </span></span><span> <span>'content' => $content, </span></span><span> <span>); </span></span><span> <span>return $block; </span></span><span> <span>} </span></span><span><span>}</span></span></span>>
經常詢問有關Drupal的EntityFieldQuery
的問題(常見問題解答)>在Drupal中EntityFieldQuery的主要目的是什麼?它提供了一種簡單有效的方法來處理複雜的查詢,從而更容易檢索,過濾和排序數據。當您需要從多個表中獲取數據或要在查詢中應用複雜的條件時,這特別有用。
如何使用EntityFieldQuery從特定的實體類型中獲取數據?要從特定實體類型中獲取數據,您可以使用EntityFieldQuery類的“實體調節”方法。此方法接受兩個參數:條件類型(對於這種情況,應為“ ENTITY_TYPE”)和您要從中獲取數據的實體類型。以下是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node',node');$ usce = $ quey-> query-> execute();
>我可以一次使用EntityFieldQuery一次從多個實體類型中獲取數據嗎?一次支持一次從一個實體類型中獲取數據。如果您需要從多種實體類型中獲取數據,則需要對每種類型進行單獨的查詢。 >>如何對EntityFieldQuery的結果進行分類?
>您可以使用“ fieldorderby”方法對EntityFieldQuery的結果進行分類。此方法接受三個參數:字段名稱,要排序的列以及排序方向(“升級”或“降” desccenter的“ ASC”)。這是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node'',node'>> fieldorderby('fieldOrderby('field_name'field_name '','value','value',',',',',,' 'desc');
$ result = $ query-> execute();
>我可以使用EntityFieldQuery來獲取來自自定義字段的數據?
是的,您可以使用“ fieldCondition”方法從自定義字段獲取數據。此方法接受三個參數:字段名稱,要過濾的列以及要過濾的值。這是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node','node'>> fieldCondition('Field_custom' '自定義值');
$ result = $ query-> execute();
>我如何限制返回的結果數通過EntityFieldQuery?
>您可以使用“範圍”方法來限制EntityFieldQuery返回的結果數。此方法接受兩個參數:偏移量(跳過的結果數)和限制(要返回的結果的最大數量)。以下是一個示例: $ query = new EntityFieldQuery();$ query-> entityCondition( 'entity_type','node','node')
> - > range(0,10) $ result = $ query-> execute();
>我可以使用EntityFieldQuery從具有特定狀態的實體獲取數據?
是的,您可以將“ EntityCondition”方法與“狀態”類型類型一起從具有特定狀態的實體中獲取數據。以下是一個示例:
$ query = new EntityFieldQuery();$ query-> entityCondition('entity_type','node','node'')
> - > entityCondition('status',status',1); $ result = $ query-> execute();
>我如何從具有特定捆綁包的實體獲取數據ENTITYFIELDQUERY?
您可以使用“捆綁”條件類型的“ EntityCondition”方法從具有特定捆綁包的實體中獲取數據。這是一個示例:
$ query = new EntityFieldQuery(); $ query-> entityCondition('entity_type','node','node')
- > entityCondition('bundle' bundle'','bundle'','acrest') ;$結果= $ query-> execute();
>我可以使用EntityFieldQuery從實體獲取數據是在特定時間創建或更新的?該方法接受三個參數:屬性名稱,要過濾的值以及用於比較的操作員。以下是一個示例:
$ query = new EntityFieldQuery();
$ QUERY-> entityCondition('entity_type','node','node'')
> - > propertyCondition('創建','created',strtotime(' - ' - ' - strtotime(' - ' - 1天'),'> =');$ result = $ query-> execute();
>>我如何使用EntityFieldQuery? $query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition('field_multi_value', 'value', '特定值','=',1);
$ result = $ query-> execute();
>如何對EntityFieldQuery的結果進行分類?
>您可以使用“ fieldorderby”方法對EntityFieldQuery的結果進行分類。此方法接受三個參數:字段名稱,要排序的列以及排序方向(“升級”或“降” desccenter的“ ASC”)。這是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node'',node'>> fieldorderby('fieldOrderby('field_name'field_name '','value','value',',',',',,' 'desc');
$ result = $ query-> execute();
>我可以使用EntityFieldQuery來獲取來自自定義字段的數據?
是的,您可以使用“ fieldCondition”方法從自定義字段獲取數據。此方法接受三個參數:字段名稱,要過濾的列以及要過濾的值。這是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node','node'>> fieldCondition('Field_custom' '自定義值');
$ result = $ query-> execute();
>我如何限制返回的結果數通過EntityFieldQuery?
$ query-> entityCondition( 'entity_type','node','node')
> - > range(0,10) $ result = $ query-> execute();
>我可以使用EntityFieldQuery從具有特定狀態的實體獲取數據?
是的,您可以將“ EntityCondition”方法與“狀態”類型類型一起從具有特定狀態的實體中獲取數據。以下是一個示例:
$ query-> entityCondition('entity_type','node','node'')
> - > entityCondition('status',status',1); $ result = $ query-> execute();>我如何從具有特定捆綁包的實體獲取數據ENTITYFIELDQUERY?
您可以使用“捆綁”條件類型的“ EntityCondition”方法從具有特定捆綁包的實體中獲取數據。這是一個示例:
$ query = new EntityFieldQuery();
$ query-> entityCondition('entity_type','node','node')
- > entityCondition('bundle' bundle'','bundle'','acrest') ;$結果= $ query-> execute();
>我可以使用EntityFieldQuery從實體獲取數據是在特定時間創建或更新的?該方法接受三個參數:屬性名稱,要過濾的值以及用於比較的操作員。以下是一個示例:
$ query = new EntityFieldQuery();
$ QUERY-> entityCondition('entity_type','node','node'')
$ result = $ query-> execute();
>>我如何使用EntityFieldQuery? $query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition('field_multi_value', 'value', '特定值','=',1);
$ result = $ query-> execute();
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition('field_multi_value', 'value', '特定值','=',1);
$ result = $ query-> execute();
以上是了解Drupal的EntityFieldQuery的詳細內容。更多資訊請關注PHP中文網其他相關文章!

長URL(通常用關鍵字和跟踪參數都混亂)可以阻止訪問者。 URL縮短腳本提供了解決方案,創建了簡潔的鏈接,非常適合社交媒體和其他平台。 這些腳本對於單個網站很有價值

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

這是有關用Laravel後端構建React應用程序的系列的第二個也是最後一部分。在該系列的第一部分中,我們使用Laravel為基本的產品上市應用程序創建了一個RESTFUL API。在本教程中,我們將成為開發人員

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

2025年的PHP景觀調查調查了當前的PHP發展趨勢。 它探討了框架用法,部署方法和挑戰,旨在為開發人員和企業提供見解。 該調查預計現代PHP Versio的增長

在本文中,我們將在Laravel Web框架中探索通知系統。 Laravel中的通知系統使您可以通過不同渠道向用戶發送通知。今天,我們將討論您如何發送通知OV


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版