1

$many_many / $belong_many_many の関係で、DataObject を別の DataObject にプログラムで追加しようとしています。Silverstripe-3 はそのタスクに問題があるようです。

//Object 1 
<?php 
class ProductSubCategory extends DataObject { 

   static $db = array( 
      'Name' => 'Text', 
      'Description' => 'Text', 
      'RemoteIndexId'=>'varchar', 
      'LegalName' => 'Text', 
      'CodeName' => 'Text' 
); 
static $many_many = array('Ingredients'=>'Ingredient');

function addIngredients($ingredientsArray){

   foreach($ingredientsArray as $k=>$value){ 
         $newIngredient = new Ingredient(); 
         $newIngredient->RemoteIndexId = $value->id; 
         $newIngredient->Name = $value->name; 
         $newIngredient->CodeName = $value->code_name; 
         $newIngredient->Description = $value->description;                   
         $this->Ingredients()->add($newIngredient); 
      } 
   }

} 
//Object 2 
    <?php 
    class Ingredient extends DataObject { 
   static $db = array( 
      'Name' => 'Text', 
      'RemoteIndexId'=>'Varchar', 
      'ScientificName' => 'Text', 
      'Description'=>'Text', 
      'Percentage'=>'Varchar', 
      'CodeName'=>'Varchar' 
   );

   static $belong_many_many = array('ProductSubCategory' => 'ProductSubCategory');


    //....(some fields for the UI)... 
    }

問題の説明: 1. 成分がデータベースに書き込まれていません。2. テーブル ProductSubCategory_Ingredient はレコードを取得しますが、IngredientID ではなく、ProductSubCategoryID の ID のみが含まれます 3. エラー メッセージはありません

何日も解決策を探していましたが、役に立ちません
助けてください!

4

2 に答える 2

1

変数名にタイプミスがあります。sにがありませんbelongs

これ:

static $belong_many_many = array('ProductSubCategory' => 'ProductSubCategory');

これでなければなりません:

static $belongs_many_many = array('ProductSubCategory' => 'ProductSubCategory');

SS3の多対多の関係に関する優れたリソースは次のとおりです。

于 2012-12-01T00:15:55.660 に答える
0

@3dg00 は正しい$belongs_many_manyです。's' を使用する必要があります。また、呼び出す必要があります。

$this->write(null, null, null, true);

foreach ループの後、データベースに書き込まれます。 http://api.silverstripe.org/3.0/framework/model/DataObject.html#methodwrite

于 2013-01-20T10:26:38.603 に答える