web-dev-qa-db-ja.com

Drupal 7)のSQLクエリでnidからノード本体を取得する方法

この質問 から、field_data_bodyデータベースからノードの本体を取得します。

field_data_bodyにはnidフィールドがありません。

nidから本文を取得するには、どのクエリを使用できますか?

明確にするために、実際のサイトにダンプをインストールせずに、データベースダンプからテキストをすばやくフェッチしたかっただけです。 PHPここでは探していません。

1
kqw

ただし、field_data_bodyにはnidフィールドがありません。

フィールドは任意のエンティティにアタッチできるため、nidとは異なる主キーを持つ可能性があります。

reallyが直接SQLを使用する必要がある場合、次のようにフィールドをクエリできます

SELECT body_value FROM field_data_body WHERE entity_type = 'node' AND entity_id = 1

ただし、これはDrupalのいくつかのレイヤーをバイパスするため、通常は直接クエリを使用しないことを強くお勧めします。

代わりに、

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
  ->propertyCondition('status', NODE_PUBLISHED)
  ->propertyCondition('nid', 1)
;
$result = $query->execute();

$nodes = node_load_multiple(array_keys($result['node']));

foreach ($nodes as $node) {
  $bodies = field_get_items('node', $node, 'body');
  foreach ($bodies as $body) {
    var_dump($body['safe_value']);
  }
}

EFQバージョンにはいくつかの利点があります

  1. 安全です。インジェクション攻撃を(簡単に)誤って開くことはできません。
  2. 安全にエスケープされた値を出力し、XSS攻撃を回避します。
  3. ノードのbodyフィールドに複数の値がある場合に機能します。
  4. 複数の言語のサイトで動作します。
7
Letharion

_field_data_body_がノードではないエンティティに関連付けられている可能性があるためだと思います。_entity_id_フィールドをnidフィールドと同等のものとして見る必要があります。

クエリしようとしているノードの本体コンテンツである場合は、db_query('SELECT body_value FROM `field_data_body` where entity_id = :nid, array(":nid" => $nid));を実行します

0
TerryCB