繁体   English   中英

多对多关系保存失败

[英]Many-To-Many relationship save fails

我有这种多对多关系:

M2M

这些是我的模型:

产品变体

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM