Silverstripe S3:DataObject以many_many关系添加

时间:2012-11-30 18:25:52

标签: many-to-many relationship belongs-to silverstripe

我正在尝试以$ many_many / $ belongs_many_many关系以编程方式将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获取记录,但它们仅包含ProductSubCategoryID的ID,而不包含IngredientID 3.没有错误消息

我现在一直在四处寻找解决方案,但无济于事 请帮忙!

2 个答案:

答案 0 :(得分:1)

变量名中有拼写错误。您在s中缺少belongs

此:

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

应该是这样的:

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

这是SS3中多对多关系的良好资源:
http://fake-media.com/2014/01/18/silverstripe-3-many-many-a-comprehensive-example/

答案 1 :(得分:0)

@ 3dg00是对的,$belongs_many_many应该是's',你还需要打电话

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

在你的foreach循环之后

将事情写入数据库。 http://api.silverstripe.org/3.0/framework/model/DataObject.html#methodwrite