我正在尝试以$ 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.没有错误消息
我现在一直在四处寻找解决方案,但无济于事 请帮忙!
答案 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);
将事情写入数据库。 http://api.silverstripe.org/3.0/framework/model/DataObject.html#methodwrite