it-swarm.com.de

So setzen Sie Eltern auf Taxonomiebegriff

Ich habe getan:

$term = Term::create([
  'name' => 'title', 
  'vid' => 'myvocab',
])->save();

Es klappt.

Aber ich scheine nicht in der Lage zu sein, den übergeordneten Begriff festzulegen.

Ich habe versucht:

$term->parent = array($parent_tid);
$term->save();

Es gibt einen Fehler:

InvalidArgumentException: Wert ist keine gültige Entität. in Drupal\Core\Entity\Plugin\DataType\EntityReference-> setValue () (Zeile 106 von /core/lib/Drupal/Core/Entity/Plugin/DataType/EntityReference.php).

Ich habe auch versucht:

$term->parents = array($parent_tid);
$term->save();

Es gibt keinen Fehler, macht aber auch nichts.

In meinem Code kann $ term ein neuer oder ein vorhandener Begriff sein, den ich geladen habe. Deshalb habe ich den übergeordneten Begriff festgelegt und ihn dann gespeichert. Aber ich kann es nicht zum Laufen bringen.

Die Dokumentation für D8 ist spärlich. Ich habe den Code im Taxonomiemodul durchgearbeitet und es sieht so aus, als ob parent ein Entitätsreferenzfeld ist, das mehrere Werte akzeptiert, aber ich kann nicht herausfinden, wie es festgelegt werden soll. Es sieht so aus, als ob das Setzen von parent auf Array ($ id) funktionieren sollte, aber ich denke, der Magic Setter bricht. Irgendeine Hilfe?

2
Rob

Der richtige Weg für ein Referenzfeld besteht darin, die Eigenschaft target_id festzulegen:

$term->parent = ['target_id' => '2'];

All diese kürzeren Versionen funktionieren auch:

$term->parent = ['2'];
$term->parent = '2';
$term->parent = 2;

Funktioniert auch so:

$term->set('parent', ['target_id' => 2]);
$term->set('parent', 2);
6
4k4

Es stellt sich heraus, dass ich es doch richtig gemacht habe: $term->parent = array($parent_tid). Das Problem war, dass ich $parent_tid Verwendete, um $another_term->tid Zu finden. Es stellt sich heraus, dass dies eine FieldItemList ist, und um die Nachricht zu erhalten, muss ich $another_term->tid->value Verwenden. Ich weiß nicht, ob es vielleicht einen besseren Weg gibt?

0
Rob