了解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)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...
