Ich habe einige Schwierigkeiten beim Festlegen einer Taxonomie für einen Knoten. Derzeit verwende ich diesen Code.
$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();
Was bisher gut funktioniert (unter einem Bild der Felder "detailseite").
Alles wird richtig eingestellt und ich kann die neu erstellten Knoten im Admin-Bereich finden, die richtig funktionieren. Jetzt muss ich 'field_meldungstyp' setzen, was eine Entitätsreferenz auf eine Taxonomie ist:
welches bereits drei Einträge enthält:
Ich möchte die Knoten, die ich programmgesteuert erstellt habe, so einstellen, dass "field_meldungstyp" auf "Artikel" des "Meldungstyp" -Vokabulars gesetzt ist.
Ich habe bereits versucht hinzuzufügen:
'field_meldungstyp' => array( 'tid' => 19 ),
wobei 19 die Nachricht von "Artikel" des zuvor erwähnten Vokabulars ist. Und dort stecke ich fest. Auch https: //www.drupal.org/node/2402811 hat bei mir nicht funktioniert. Ebenso gut wie
$node->field_meldungstyp[$node->language][]['tid'] = 19;
hat auch nicht funktioniert.
einfach hinzufügen
$node = Node::create(array(
...
'field_meldungstyp' => 19,
...
));
führt zum Absturz mit folgendem Fehler:
Drupal \ Core \ Entity \ EntityStorageException: SQLSTATE [HY000]: Allgemeiner Fehler: 1366 Falscher ganzzahliger Wert: 'datetime' für Spalte 'created' in Zeile 1: 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 ([: db_insert_placeholder_0] => 343 [: db_insert_placeholder_1] => 19 [: db_insert_placeholder_2] => 1 [: db_insert_placeholder_3] => 0 [: db_insert_placeholder_4] => datetime) in Drupal \ Core \ Entity \ Sq> save () (Zeile 770 von core / lib / Drupal / Core / Entity / Sql / SqlContentEntityStorage.php). Drupal \ Core \ Database \ Statement-> execute (Array, Array) (Zeile: 610) Drupal \ Core \ Database \ Connection-> Abfrage ('INSERT INTO {taxonomy_index} (nid, tid,
quelle
12345
zu19
entsprechend;))Drupal\Core\Entity\EntityStorageException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'datetime' for column 'created' at row 1: 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 ( [:db_insert_placeholder_0] => 188 [:db_insert_placeholder_1] => 19 [:db_insert_placeholder_2] => ... in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
In Drupal 7 gab es Taxonomie-Referenzfelder, die das Muster verwendeten
['tid' => NUMBER]
. Dies sind Entitätsreferenzfelder. Das EntityReferenceItem hat die Eigenschaftsdefinitionen:target_id
undentity
. Ersteres ist entweder eine Ganzzahl oder eine Zeichenfolge, abhängig von den Einstellungen des Entitätsreferenzelements (im Grunde Entitätstyp config / content).Dies ist auch eine ähnliche Frage wie beim programmgesteuerten Festlegen des Werts für ein mehrwertiges Feld in Drupal 8
Versuchen Sie also, das Muster zu verwenden
Als Teil von Entity :: create
Verwenden von FieldableEntityInterface :: set
Verwenden von TypedDataInterface :: setValue direkt für das Feldelement.
Mit magischer Methode
Beachten Sie, dass dadurch alle aktuellen Werte des Feldes überschrieben werden.
quelle
=>
nicht sein=
. :-)=>
ich schon den ganzen Tag) gibt mir immer nochsyntax error, unexpected '=>' (T_DOUBLE_ARROW)
.Hier ist, wie ich es für D8 gemacht habe.
// Neue Steuer erstellen
quelle
Ein anderer Ansatz wäre, den Knoten nach der Erstellung wie folgt zu aktualisieren:
quelle