検索
ホームページバックエンド開発PHPチュートリアルDrupalの理解を理解するエンティティフィールドクリー

Drupalの理解を理解するエンティティフィールドクリー

キーテイクアウト

  • EntityFieldQueryはDrupalのクラスであり、開発者がSQLクエリを記述せずにデータベースからエンティティに関する情報を取得できるようにし、データの取得、フィルタリング、ソートを容易にします。これは、複数のテーブルからデータを取得する必要がある場合、または複雑な条件をクエリに適用したい場合に特に便利です。
  • EntityFieldQueryクラスを拡張して独自のChildクラスを作成し、複数の場所で同じクエリを構築できるようにすることができます。たとえば、すべてのアクティブユーザーを作成日の昇順ですべてのアクティブユーザーに取得するためのクエリを作成することをお勧めします。これは、EntityFieldQueryを拡張し、適切な条件と順序を設定する新しいクラスを作成することで実現できます。 EntityFieldQueryは、特定のエンティティタイプからデータを取得するための「EntityCondition」、エンティティのプロパティに基づく条件を追加するための「プロパティコンディション」、カスタムフィールドからのデータを取得するための「フィールドコンディション」などのさまざまな方法をサポートしています。結果のソート。ただし、1つのエンティティタイプからのデータの取得のみを一度にサポートします。複数のエンティティタイプからデータを取得する必要がある場合は、各タイプの個別のクエリを実行する必要があります。
  • はじめに
  • 複雑なWebアプリを構築する場合、最終的にはデータベースと対話する必要があります。 Drupalでデータを取得するには、提供されたデータベース抽象化レイヤーを使用できます。これには、SQLの知識を適切に使用する必要があります。 Drupal 7からEntityFieldQuery APIが提供されます。これにより、実際にSQLクエリを構築することなく、Drupalからエンティティに関する情報を取得できます。この記事では、EntityFieldQuery APIを使用してDrupalからデータを取得し、モジュールで使用する方法を見てみましょう。
EntityFieldQueryクラス

EntityFieldQueryクラスは、一部の条件に一致するDrupalでエンティティを見つけるために使用されます。 EntityFieldQueryは、drupalインストールのinclude/entity.incファイルに存在します。

このクラスには、エンティティタイプを指定するさまざまな方法と、どのデータを取得するかをフィルタリングできる特定の条件があります。この記事を通してこれらの方法を詳細に確認します。

EntityFieldQueryの使用中に従う基本的な使用法は、何よりもまずこのクラスのオブジェクトを作成します。オブジェクトが作成されたら、それにいくつかの条件を追加し、実行方法を呼び出して結果を取得します。

一般的なテンプレートは次のとおりです


これで、製品、映画、本の3つの新しいDrupalノードタイプ、および結果を表示するブロックをインストールする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の理解を理解するエンティティフィールドクリーモジュールをインストールしたら、次のように、Drupal管理パネルの追加セクションに新しいノードタイプも表示できるはずです

EntityFieldQueryを使用して簡単なクエリを実行しますDrupalの理解を理解するエンティティフィールドクリー

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>

映画や本などのさまざまなノードを追加して、ブロックに表示されていることを確認する必要があります。上記のコードでは、EntityFieldQueryからノードIDを使用したら、node_load_multipleを使用してノードをロードして表示します。 エンティティフィールドクリーにエンティティ条件を追加する
<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の理解を理解するエンティティフィールドクリー

エンティティコンディションを使用して複数のタイプのノードを取得するために、ノードタイプの配列を指定することもできます。データベースからすべての製品と映画を取得するには:

EntityFieldQueryにプロパティ条件を追加
<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>

クエリにプロパティ条件を追加することもできます。これらは、クエリしているエンティティタイプに依存します。ほとんどの場合、プロパティ条件は、あなたがクエリしているエンティティタイプのフィールドにあります。たとえば、特定のユーザーなどによって公開されている、または書かれているノードのクエリができます。

PropertyConditionを使用して公開されたノードのみを表示するクエリは次のとおりです

<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クラスの拡張Drupalの理解を理解するエンティティフィールドクリー

時々、多くの場所で同じクエリを構築する必要があるかもしれません。エンティティフィールドクリークラスを拡張し、独自の子供クラスを作成することです。

作成日の昇順ですべてのアクティブユーザーを取得するためにクエリを作成するとします:

これで、このクエリをどこでも使用できます。

<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モジュールを作成して楽しんでください! DrupalのEntityFieldQuery
<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>
に関するよくある質問(FAQ)

DrupalのEntityFieldQueryの主な目的は何ですか?

エンティフィールドクリーを使用して特定のエンティティタイプからデータを取得するにはどうすればよいですか?特定のエンティティタイプからデータを取得するには、EntityFieldQueryクラスの「EntityCondition」メソッドを使用できます。このメソッドは、2つのパラメーターを受け入れます。条件タイプ(このケースの「entity_type」)と、データを取得するエンティティタイプです。例は次のとおりです。

$ query = new entityfieldquery();

$ query-> entitycondition( 'entity_type'、 'node');

$ result = $ query-> execute();

EntityFieldQueryを使用して、複数のエンティティタイプから一度にデータを取得できますか?一度に1つのエンティティタイプからデータの取得をサポートします。複数のエンティティタイプからデータを取得する必要がある場合は、各タイプの個別のクエリを実行する必要があります。$ query = new entityfieldquery();

$ query-> entitycondition( 'entity_type'、 'node')
- > fieldOrderby( 'field_name'、 'value'、 'desc');
$ result = $ query-> execute();

entityfieldqueryを使用してフェッチできますかカスタムフィールドからのデータ?

はい、「フィールドコンディション」メソッドを使用して、カスタムフィールドからデータを取得できます。このメソッドは、フィールド名、フィルターする列、およびフィルタリングする値の3つのパラメーターを受け入れます。例は次のとおりです。

$ query = new entityfieldquery();

$ query-> entitycondition( 'entity_type'、 'node')
- > fieldcondition( 'field_custom'、 'value'、 'Custom Value');
$ result = $ query-> execute();

結果の数を制限するにはどうすればよいですかEntityFieldQueryによって返されますか?

$ query = new EntityFieldQuery();

$ query-> entityCondition( 'entity_type'、 'node')

- > range(0、10);

$ result = $ query-> execute();

entityfieldqueryを使用して、特定のステータスを持つエンティティからデータを取得できますか?
はい、「ステータス」条件タイプの「エンティティコンディション」メソッドを使用して、特定のステータスを持つエンティティからデータを取得できます。例は次のとおりです。

$ query = new entityfieldquery();

$ query-> entitycondition( 'entity_type'、 'node')

- > entitycondition( 'status'、1);

$ result = $ query-> execute();


特定のバンドルを使用しているエンティティからデータを取得するにはどうすればよいですかEntityFieldQuery?
「バンドル」条件タイプの「EntityCondition」メソッドを使用して、特定のバンドルを持つエンティティからデータを取得できます。例は次のとおりです。

$ query = new entityfieldquery();

$ query-> entitycondition( 'entity_type'、 'node')

- > entitycondition( 'bundle'、 'article') ;

$ result = $ query-> execute();


entityfieldqueryを使用してエンティティからデータを取得できますか特定の時間に作成または更新されましたか?このメソッドは、プロパティ名、フィルタリング値、および比較に使用する演算子の3つのパラメーターを受け入れます。例は次のとおりです。

$ query = new entityfieldquery();
$ query-> entitycondition( 'entity_type'、 'node')
- > propetycondition( 'created'、strtotime( ' - 1 day ')、'> = ');

$ result = $ query-> execute();

「Delta」列を使用して「FieldCondition」メソッドを使用して、エンティティからデータを取得できます。多価フィールドに特定の値を持っています。例は次のとおりです。


$ query = new entityfieldquery();
$ query-> entitycondition( 'entity_type'、 'node')
- > fieldcondition( 'field_multi_value'、 'value'、 「特定の値」、 '='、1);
$ result = $ query-> execute();

以上がDrupalの理解を理解するエンティティフィールドクリーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

PHPセッションからデータをどのように取得しますか?PHPセッションからデータをどのように取得しますか?May 01, 2025 am 12:11 AM

toretrievedatafrompsession、Startthessession withsession_start()andAccessvariablesshe $ _SessionArray.forexample:1)Startthessession:session_start()

セッションを使用してショッピングカートを実装するにはどうすればよいですか?セッションを使用してショッピングカートを実装するにはどうすればよいですか?May 01, 2025 am 12:10 AM

セッションを使用して効率的なショッピングカートシステムを構築する手順には、次のものがあります。1)セッションの定義と機能を理解します。セッションは、リクエスト全体でユーザーのステータスを維持するために使用されるサーバー側のストレージメカニズムです。 2)ショッピングカートに製品を追加するなど、基本的なセッション管理を実装します。 3)製品の量管理と削除をサポートし、高度な使用状況に拡大します。 4)セッションデータを持続し、安全なセッション識別子を使用することにより、パフォーマンスとセキュリティを最適化します。

PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境