メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Drupalのエンティティ(Entity)データ取得クラス(EntityFieldQuery)のデバッグ方法

Drupalのエンティティ(Entity)データ取得クラス(EntityFieldQuery)のデバッグ方法

問題点: エンティティ(Enity)データ取得するクラス:EntityFieldQueryの実行SQL文の出力はできない

  • D7以降にエンティティ(Entity)の構造がDrupalの中核な存在になってきました
  • カスタマイズ/開発時に、エンティティデータ取得はEntityFieldQueryがよく使用してきました
    • もちろん、古典的なデータ取得:db_queryなどの使用もできます
  • データ取得条件が複雑になると、作成されたSQLをチェックしてみたいときが多くなります
  • クラス:EntityFieldQueryの実行SQL文の出力はできない現状です

解決:hook_sql_alter()実装してSQL文を出力して確認

  • モジュール(Devel)がインストールして、デバッグメッセージを画面に出力するようにします
  • クラス(EntityFieldQuery)の条件設定時に、デバッグ用のタグを追加します(タグがなければすべてのsql文が出力される)
    EntityFieldQueryにデバッグタグ追加よりその処理のみのSQL文出力
  • hook_sql_alter()を実装して、デバッグタグがあるEntityFieldQueryのSQL文をdsm(develモジュール)関数で出力します
        $query = new EntityFieldQuery();
        $result = $query
            ->entityCondition('entity_type', $entity_type)
            ->entityCondition('bundle', $bundle)
            ->propertyCondition('vocabulary', reset($values) )
            ->addTag('drills_sql_debug')   // デバッグ用のタグ
            ->execute();
    
    /**
     * Implement hook_query_alter
    **/
    function MODULE_query_alter($query) {
        if ($query->hasTag('drills_sql_debug')) {
            dpm((string)$query);
        }
    }
  • 上記コードでEntityFieldQueryのあるデバッグタグのSQL文が画面に表示されます
    EntityFieldQueryのSQL文デバッグ結果

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads