0

我有这个多对多关系:

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吗?

4

1 回答 1

0

您要么在 Productvariant 和 Propertyvalue 之间有一个多对多,然后像你一样定义它们。Datamapper 将自动查找名为“productvariants_propertyvalues”的联结表,其中包含两个表的外键。

所以你的设置应该可以工作。他们唯一可能弹出的问题是datamapper使用的CI复数()函数没有产生正确的表名,导致弹出未找到错误。

如果创建中间模型,则将多对多拆分为两个一对多。不是问题,但您是否需要它取决于您的应用程序设计。

编辑:我现在看到您在表名前加上了双下划线。Datamapper 不会生成那个,所以这就是无法找到联结表的原因。要么删除这些,要么切换到您手动定义“join_table”的高级关系定义。

于 2013-10-20T19:52:49.983 回答