我有这种多对多的关系:
这些是我的模特:
Productvariant
class Productvariant extends DataMapper {
var $has_many = array('propertyvalue');
var $has_one = array('product');
}
的PropertyValue
class Propertyvalue extends DataMapper {
var $has_many = array('productvariant');
var $has_one = array('property');
}
控制器
$productvariant = new Productvariant(1);
$prodval = new Propertyvalue(1);
$productvariant->save($prodval);
消息
Unable to relate productvariant with propertyvalue.
我在文档中只能找到自我多对多的关系,我似乎误读了他们希望你以这种方式使用模型的方式。
我是否还需要为额外的表定义模型?
==========================
更新
我为多对多关系创建了一个中间模型;
模型
class Productvariant_propertyvalues extends DataMapper {
var $table = '__productvariants_propertyvalues';
var $has_one = array('productvariant', 'propertyvalue');
}
控制器
$productvariant = new Productvariant(1);
$propval = new Propertyvalue(1);
$pv_vals = new Productvariant_propertyvalues();
$pv_vals->save(array($productvariant, $propval));
它现在有效,但如果没有额外的Model
答案 0 :(得分:0)
您要么在Productvariant和Propertyvalue之间有多对多,那么就像您一样定义它们。 Datamapper将自动查找名为“productvariants_propertyvalues”的联结表,其中包含两个表的外键。
所以你的设置应该有效。它们只会发出可能弹出的问题,即datamapper使用的CI plural()函数不会产生正确的表名,导致弹出未找到的错误。
如果您创建一个中间模型,则将多对多分为两个一对多。没问题,但是否需要它取决于您的应用程序设计。
编辑:我现在看到你在表名前加上了一个双下划线。 Datamapper不会生成,因此无法找到联结表。删除它们,或切换到高级关系定义,您可以在其中手动定义“join_table”。