[英]Many-To-Many relationship save fails
我有这种多对多关系:
这些是我的模型:
产品变体
class Productvariant extends DataMapper {
var $has_many = array('propertyvalue');
var $has_one = array('product');
}
适当的价值
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
这不应该可行吗?
您可以在Productvariant和Propertyvalue之间建立多对多的关系,然后按定义的方式进行定义。 Datamapper会自动查找一个称为“ productvariants_propertyvalues”的联结表,其中包含两个表的外键。
因此,您的设置应该可以正常工作。 他们唯一可能弹出的问题是datamapper使用的CI plural()函数不能产生正确的表名,从而导致未找到的错误弹出。
如果创建中间模型,则将多对多拆分为两个一对多。 这不是问题,但是是否需要取决于您的应用程序设计。
编辑:我现在看到您在表名的前面加上了双下划线。 Datamapper不会生成该数据,因此这就是找不到联结表的原因。 要么删除这些,要么切换到高级关系定义,您可以在其中手动定义“ join_table”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.