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


7
$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();

回答:


8
$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ベースの研究の多くが節約されます。そして、それはあなたがコードベースを学ぶのを助けます。

ここに画像の説明を入力してください


説明を追加できますか?
Adrian Cid Almaguer

これの答えはどこですか?
ケビン

PHPStormを使用してメソッドとクラス検査をウォークスルーすることをお勧めします。Aptanaよりもはるかに高度です。また、dump()およびdie()ステートメントよりもxdebugを使用することをお勧めします。
ケビン

はい、それはより高速です。私はそれをすべきです。Aptanaは無料なので好きです。
oknate 2016

1
field_league_id、textはどのタイプのフィールドですか?またはエンティティ参照?entity_referenceの場合は、setValue(['target_id' => $ league_id]);を実行する必要がある場合があります。
oknate 2016

1

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

$term = \Drupal\taxonomy\Entity\Term::load($tid);
if (!empty($term)) {
  $term->field_league_id = 123; // For multivalue fields, use array().
  $term->save();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.