Programmgesteueres Aktualisieren eines Taxonomiebegriffs

7
$term = Term::load($_tid);
$term->field_league_id = 'ID value';
$term->Save();

Ich aktualisiere die Begriffe mit dem obigen Code, aber es funktioniert nicht. Erstellen Sie den Begriff nach Begriff-> Speichern () funktioniert normal. Jeder hatte damit erlebt, bitte helfen Sie.

Aktualisiert:

$term = Term::load($_tid);
$term->field_league_id->setValue($league_id);
$term->Save();

Diese Lösung funktioniert nicht, sie wirft:

Aufruf einer Mitgliedsfunktion setValue () für ein Nichtobjekt in ..

Oben erklärte ich ref. bereits.

use Drupal\taxonomy\Entity\Term;

Der Code zum Erstellen einer neuen Taxonomie funktioniert einwandfrei, jedoch nicht zum Aktualisieren.

$term = Term::create([
            'name' => $league->caption,
            'vid' => 'league',
            'field_league_id' => $league_id,
            'field_league_code' => $league->league,
            'field_league_year‎' => $league->year,
            'field_league_numberofteams' => $league->numberOfTeams,
        ]);

        $term->Save();
JohnTang
quelle

Antworten:

8
$term = Term::load($_tid);
$term->field_league_id->setValue('ID value');
$term->Save();

Zusätzliche Informationen (in Kommentaren angefordert):

Wenn Sie das Objekt ausdrucken, sehen Sie, dass Felder die Klasse core / lib / Drupal / Core / Field / FieldItemList.php verwenden.

Wenn Sie die Methoden durchsuchen, sehen Sie einige Funktionen für die Interaktion mit dem FieldItemList-Objekt, z. B. setValue (),

Wenn ich in Drupal 8 entwickle, verwende ich die, um die API zu lernen

dump () funktioniert häufig, um festzustellen, mit welcher Art von Objekt ich es zu tun habe, und um die Methoden zu überprüfen.

dump($term); die();

Tatsächlich habe ich in meiner Datei settings.local.php ein Include

include 'my_settings.php';

und dort habe ich diese Funktion:

function nprint($obj) {
  dump($obj);
  die();
}

Dies ist etwas, mit dem ich seit Jahren Objekte inspiziere. Jetzt, da Drupal viel objektorientierter ist, ist es wichtig, Objekte auszudrucken, um herauszufinden, welche Klasse sie verwenden.

Ein weiteres wichtiges Werkzeug für mich ist die Verwendung eines Editors, der die Suche nach Dateinamen ermöglicht (ich verwende die kostenlose Software Aptana Studio 3).

Wenn Sie also sehen, dass es sich um eine "FieldItemList" handelt, können Sie mit "Befehl + t" nach Dateinamen suchen und "FieldItemList" eingeben. Dies spart viel webbasierte Forschung. Und es hilft Ihnen, die Codebasis zu lernen.

Geben Sie hier die Bildbeschreibung ein

oknate
quelle
Kannst du eine Erklärung hinzufügen?
Adrian Cid Almaguer
Wo ist die Antwort darin?
Kevin
Ich würde empfehlen, PHPStorm zu verwenden, um Methoden und Klasseninspektionen durchzugehen ... es ist weitaus fortgeschrittener als Aptana. Ich würde auch empfehlen, xdebug über dump () und die () Anweisungen zu verwenden.
Kevin
Ja, das geht schneller. Ich sollte das tun. Ich mag Aptana, weil es kostenlos ist.
oknate
1
Was für ein Feld ist field_league_id, text? oder Entitätsreferenz? Wenn es sich um entity_reference handelt, müssen Sie möglicherweise setValue ausführen (['target_id' => $ liga_id]).
oknate
1

Hier ist ein einfaches Beispiel:

$term = \Drupal\taxonomy\Entity\Term::load($tid);
if (!empty($term)) {
  $term->field_league_id = 123; // For multivalue fields, use array().
  $term->save();
}
Kenorb
quelle