ノードの分類法を設定するのにいくつかの問題が発生しました。現在、私はこのコードを使用しています。
$node = Node::create(array(
'type' => 'detailseite',
'title' => $data[$headlineIndex],
'langcode' => 'de',
'uid' => '1',
'status' => 1,
'field_headline' => $data[$headlineIndex],
'field_intro' => $data[$introIndex] . $categories[$data[$categoryIndex]],
'created' => $data[$dateIndex],
'field_autor' => $data[$autorIndex],
'field_teaser_text' => $data[$shortIndex],
'field_fields' => array(),
));
$node->save();
これまでのところうまくいきます(「詳細」のフィールドの画像の下)。
すべてが正しく設定され、新しく作成されたノードが管理領域で正しく機能することを確認できます。次に、分類法へのエンティティ参照である「field_meldungstyp」を設定する必要があります。
これにはすでに3つのエントリが含まれています。
プログラムで作成したノードを取得して、 "field_meldungstyp"を "Meldungstyp" -Vocabularyの "Artikel"に設定します。
私はすでに追加しようとしました:
'field_meldungstyp' => array( 'tid' => 19 ),
ここで、19は前述の語彙の「Artikel」のtidです。そして、それは私が行き詰まっているところです。また、https://www.drupal.org/node/2402811が機能しませんでした。と同様
$node->field_meldungstyp[$node->language][]['tid'] = 19;
どちらも機能しませんでした。
単に追加する
$node = Node::create(array(
...
'field_meldungstyp' => 19,
...
));
次のエラーでクラッシュします:
Drupal\Core\Entity\EntityStorageException:SQLSTATE [HY000]:一般エラー:1366不正な整数値:行1の列 'created'の 'datetime':INSERT INTO {taxonomy_index}(nid、tid、status、sticky、created)VALUES (:db_insert_placeholder_0、:db_insert_placeholder_1、:db_insert_placeholder_2、:db_insert_placeholder_3、:db_insert_placeholder_4); Drupal\Core\Entity\Sql\SqlContentEntityStorage>の配列([:db_insert_placeholder_0] => 343 [:db_insert_placeholder_1] => 19 [:db_insert_placeholder_3] => 0 [:db_insert_placeholder_4] => datetime) save()(core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.phpの770行目)。 Drupal\Core\Database\Statement-> execute(Array、Array)(Line:610)Drupal\Core\Database\Connection-> query( 'INSERT INTO {taxonomy_index}(nid、tid、status、sticky、created)VALUES( :db_insert_placeholder_0、:db_insert_placeholder_1、:db_insert_placeholder_2、:db_insert_placeholder_3、:db_insert_placeholder_4) '、配列、配列)(行:81)Drupal\Core\Database\Driver\mysql\Connection-> query(' INSERT INTO {taxonomy_index}(nid、 tid、status、sticky、created)VALUES(:db_insert_placeholder_0、:db_insert_placeholder_1、:db_insert_placeholder_2、:db_insert_placeholder_3、:db_insert_placeholder_4) '、Array、Array)(Line:32)Drupal\Core\Database\Driver\mysql\Insert-> execute ()(行:371)Drupal\Core\Database\Query\Merge-> execute()(行:525)taxonomy_build_node_index(Object)(行:479)taxonomy_node_insert(Object)call_user_func_array( 'taxonomy_node_insert'、Array)(行: 402)Drupal\Core\Extension\ModuleHandler-> invokeAll( 'node_insert'、Array)(Line:167)Drupal\Core\Entity\EntityStorageBase-> inv okeHook( 'insert'、Object)(Line:418)Drupal\Core\Entity\ContentEntityStorageBase-> invokeHook( 'insert'、Object)(Line:470)Drupal\Core\Entity\EntityStorageBase-> doPostSave(Object、)(行:304)Drupal\Core\Entity\ContentEntityStorageBase-> doPostSave(Object、)(行:395)Drupal\Core\Entity\EntityStorageBase-> save(Object)(行:761)Drupal\Core\Entity\Sql\SqlContentEntityStorage -> save(オブジェクト)(行:364)Drupal\Core\Entity\Entity-> save()(行:46)Drupal\awo_importer\Controller\T3ImporterController-> import()call_user_func_array(Array、Array)(行:123 )Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> Drupal\Core\EventSubscriber {closure}()(Line:574)Drupal\Core\Render\Renderer-> executeInRenderContext(Object、Object)(Line:124)Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> wrapControllerExecutionInRenderContext(Array、Array)(Line:97)Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> Drupal\Core\EventSubscriber {c losure}()call_user_func_array(Object、Array)(Line:144)Symfony\Component\HttpKernel\HttpKernel-> handleRaw(Object、1)(Line:64)Symfony\Component\HttpKernel\HttpKernel-> handle(Object、1、 1)(行:57)Drupal\Core\StackMiddleware\Session-> handle(Object、1、1)(行:47)Drupal\Core\StackMiddleware\KernelPreHandle-> handle(Object、1、1)(行:98 )Drupal\page_cache\StackMiddleware\PageCache-> pass(Object、1、1)(Line:77)Drupal\page_cache\StackMiddleware\PageCache-> handle(Object、1、1)(Line:47)Drupal\Core\StackMiddleware\ReverseProxyMiddleware-> handle(Object、1、1)(Line:50)Drupal\Core\StackMiddleware\NegotiationMiddleware-> handle(Object、1、1)(Line:23)Stack\StackedHttpKernel-> handle(Object、1、 1)(行:628)Drupal\Core\DrupalKernel-> handle(Object)(行:19)
ネストされた配列である必要があります。
'field_meldungstyp' => [
['target_id' => 12345]
]
これを試して:
$node = Node::create(array(
'type' => 'detailseite',
'title' => $data[$headlineIndex],
'langcode' => 'de',
'uid' => '1',
'status' => 1,
'field_headline' => $data[$headlineIndex],
'field_intro' => $data[$introIndex] . $categories[$data[$categoryIndex]],
'created' => $data[$dateIndex],
'field_autor' => $data[$autorIndex],
'field_teaser_text' => $data[$shortIndex],
'field_meldungstyp' => [
['target_id' => 12345]
]
));
$node->save();
Drupal 7では、パターン['tid' => NUMBER]
を使用した分類基準参照フィールドが存在しました。これらはエンティティー参照フィールドです。 EntityReferenceItem にはプロパティ定義があります:target_id
およびentity
。前者は、エンティティ参照アイテムの設定(基本的にはconfig/contentエンティティタイプ)に応じて、整数または文字列のいずれかになります。
これは drupal 8プログラムで複数値フィールドの値を設定する方法 と同様の質問です
だからパターンを使用してみてください
Entity :: createの一部として
Node::create([
'field_meldungstyp' => [['target_id' => 19]]
]);
FieldableEntityInterface :: setの使用
$entity->set('field_meldungstyp', ['target_id' => 19]);
TypedDataInterface :: setValueをフィールドアイテムで直接使用します。
$entity->field_meldungstyp->setValue(['target_id' => 19]);
魔法の方法で
$entity->field_meldungstyp->target_id = 19;
これにより、フィールドの現在の値が上書きされることに注意してください。
ここに私がD8のためにそれをした方法があります。
use Drupal\node\Entity\Node;
//To create new node
$node = Node::create(['type' => 'YOUR_CONTENT_TYPE_HERE']);
//To load a node by its ID
//$node = \Drupal\node\Entity\Node::load(NODE_ID);
$nodeTerms = [1,2,3...]; // 1,2,3 = terms IDs
$node->set('YOUR_FIELD_OF_TERMS', $nodeTerms);
$node->save();
//新しい税金を作成するには
use Drupal\taxonomy\Entity\Term;
$new_term = Term::create([
'vid' => "YOUR_VOCABULARY_MACHINE_NAME",
'name' => "NAME_OF_YOUR_TERM",
]);
$new_term->save();
別のアプローチは、次のように、作成後にノードを更新することです。
$node = Node::create(array(
...
));
$node->save();
$node->field_meldungstyp->target_id = 19;
$node->save();