外部ソースからDrupalインストールにデータを同期します。新しく作成したノードに分類用語の関係を追加するときに問題が発生します。
車を同期していますが、メーカー名(コードでは$ name)が語彙に含まれていない場合は、追加されます。すでに存在する場合は、tidがノードにアタッチされています。
これは、フェラーリやフォルクスワーゲンなどの用語で完全に機能します。しかし、それからメルセデスベンツがあります。何らかの理由で、EntityFieldQueryは語彙からそれを見つけられないようです。これは、このコードがループで実行されると、メルセデスベンツの用語が何度も作成されるためです。
問題は単語間のダッシュだと思います。EntityFieldQueryの背後にあるSQL句を見たいのですが、これを実行しているときに完全なdrupalセットアップがないため、Develなどのモジュールがロードされません。また、SQLを他の方法で検査する方法がわかりません。
デバッグ方法やこれを解決する方法の提案に感謝しています。すべてのリンクをいただければ幸いです。
これが私のコードです:
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('name', $name) // $name = manufacturer, like "Ferrari"
->propertyCondition('vid', 2)
->execute();
if(!empty($result))
{
$tmp = array_pop($result['taxonomy_term']);
$node->field_brand[LANGUAGE_NONE][0]['tid'] = $tmp->tid;
}
else
{
$term = new stdClass();
$term->vid = 2;
$term->name = $name
taxonomy_term_save($term);
$node->field_brand[LANGUAGE_NONE][0]['tid'] = $term->tid;
}