搜索
首页后端开发php教程了解Drupal的EntityFieldQuery

了解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.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模块,如下所示。

了解Drupal的EntityFieldQuery

安装模块后,您应该能够在Drupal Admin面板的“添加内容”部分中看到新的节点类型,如下所示

了解Drupal的EntityFieldQuery>使用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

了解Drupal的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

了解Drupal的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>
此查询的输出将如下

>

了解Drupal的EntityFieldQuery

扩展EntityFieldQuery类

有时,您可能必须在许多地方构建相同的查询。一种抽象的好方法,是扩展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();

以上是了解Drupal的EntityFieldQuery的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

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

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

在Laravel中发现文件下载的存储::下载在Laravel中发现文件下载的存储::下载Mar 06, 2025 am 02:22 AM

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

如何注册和使用Laravel服务提供商如何注册和使用Laravel服务提供商Mar 07, 2025 am 01:18 AM

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具