了解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中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

在PHPOOP中,self::引用当前类,parent::引用父类,static::用于晚静态绑定。1.self::用于静态方法和常量调用,但不支持晚静态绑定。2.parent::用于子类调用父类方法,无法访问私有方法。3.static::支持晚静态绑定,适用于继承和多态,但可能影响代码可读性。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。
