web-dev-qa-db-ja.com

プログラムで分類用語を更新する

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

上記のコードで条件を更新していますが、機能しません。 term-> Save()で用語を作成すると、正常に機能します。誰もがそれを経験していたので助けてください。

更新しました:

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

このソリューションは機能していません、それは投げています:

非オブジェクトのメンバー関数setValue()の呼び出し。

冒頭で、私は参考文献を宣言しました。既に。

use Drupal\taxonomy\Entity\Term;

新しい分類法を作成するためのコードは正常に機能していますが、更新用ではありません。

$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();
7
JohnTang
$term = Term::load($_tid);
$term->field_league_id->setValue('ID value');
$term->Save();

追加情報(コメントでリクエスト):

オブジェクトを出力すると、フィールドがクラスcore/lib/Drupal/Core/Field/FieldItemList.phpを使用していることがわかります。

メソッドを参照すると、FieldValueListオブジェクトを操作するためのいくつかの関数(setValue()など)が表示されます。

Drupal 8で開発しているとき、APIを学ぶために、

dump()関数は、私が扱っているオブジェクトのタイプを確認し、そのメソッドを検査するためにたくさん機能します。

dump($term); die();

実際、私のsettings.local.phpファイルにはインクルードがあります

include 'my_settings.php';

そしてそこに私はこの機能を持っています:

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

これは、オブジェクトを検査するために長年使用してきたものです。 drupalははるかにオブジェクト指向であるため、オブジェクトを出力して、使用するクラスを見つけることが不可欠です。

私にとってもう1つの重要なツールは、ファイル名で検索できるエディターを使用することです(私は無料のソフトウェアAptana Studio 3を使用しています)。

したがって、「FieldItemList」を処理していることがわかった場合は、「command + t」を実行してファイル名で検索し、「FieldItemList」を入力できます。これにより、Webベースの研究の多くが節約されます。そして、それはあなたがコードベースを学ぶのを助けます。

enter image description here

8
oknate

以下に簡単な例を示します。

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