メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

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

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

drupal
devel
entity type

問題点: エンティティ(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文デバッグ結果
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)