Drupalでプログラムでエンティティを作成する


7

Entity Construction Kitを使用してエンティティを作成しました。最初はルールを使用して新しいエンティティを作成したかったのですが、エンティティがフィールド化されており、フィールドがルールに公開されていません(現在、誰かがそのパッチに取り組んでいます)、しかし、私はエンティティを作成する単純な関数を書きたかったのですが、これはプログラムでノードを作成するようなものだと思っていましたが、4時間ぐらいかかり、1インチも得ていません。私はentity_createとentity_saveを持っていますが、それらはあまり機能せず、それに関するドキュメントを見つけることができません。

私が見たいのは、フィールド化されたeckで作成されたバンドルから、またはコードを通じて、サンプルエンティティを作成する方法です。

本当にありがとう

編集:最後に理解する必要があるのは、エンティティにアタッチされているフィールドの名前を指定して、それらの値も入力できるようにする方法です。

$values = array('uid' => 1, 'field_receipt_prod_ref' => 1, 'type' => 'receipt');        
$new_ent = entity_create('receipt', $values)->save();

回答:


15

あなたが持っているもののほとんどはそれほど悪く見えません。欠落しているフィールドの重要な点は、フィールドに言語があり、複数の値を持つことができること、および値は通常「値」サブキーに格納されることです。refフィールドはnodereferenceであると想定しています。つまり、実際にはのnid代わりにが格納されvalueます。

これがどのように構造化されているかを確認する最も簡単な方法は、Develモジュールをインストールし、構造を確認するためのDevelタブを使用することです。ECKエンティティで表示されるかどうかはわかりませんが、ノードの場合は表示されます。

これを試して:

$new_ent = entity_create('receipt', array(
  'uid' => 1,
  'type' => 'receipt', //bundle
  'field_receipt_prof_ref' => array(      
    LANGUAGE_NONE => array(
      0 => array(
        'nid' => 1,
      ),
    ),
  ),
))->save();

3
私はこれをpt 72フォントで入力できたらと思っていますTHANK YOU SO MUCH !!!!!!!!!!!!!! :D
アントニオ・トーレス

27

より簡単な方法は、の助けを借りることですentity_metadata_wrapper()

$e = entity_create($entityType, array('type' => $bundleName));
$ew = entity_metadata_wrapper($entityType, $e);
$ew->field_name->set('value');
$ew->save();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.