了解Drupal的EntityFieldQuery
鑰匙要點
- > 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.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>
>將實體條件添加到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>
>將屬性條件添加到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>
結論
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>
經常詢問有關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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip
