[FleaPHP]如何使用 manyToMany
浪子快刀
测试多对多表关连,发现无法在中间表中存入数据,后反复寻找原因,发现在FLEA_Db_TableDataGateway约944行左右,代码如下
复制内容到剪贴板
代码:
// 处理关联数据表
foreach ($this->links as $link) {
/* @var $link FLEA_Db_TableLink */
if (!isset($row[$link->mappingName]) ||
!is_array($row[$link->mappingName]) ||
!$link->linkCreate)
{
continue;
}
//下面为处理关联表相关意为,如果$row[$link->mappingName]为空,或者,$row[$link->mappingName]不是数组,或者设定为不允许操作表关连,则直接跳出.
这好象有点说不过去,在shop例子中,选择的产品类别是以数组形式传递的.但,别的不以数组形式传递过来的内容呢?也要转成数组形式才可以吗?
在我的测试代码中,将之改成数组就没问题了.
不知道,算不算是BUG.或者是我的版本太低了?
dualface
是这样的,多对多的中间表数据比较特别,应该是一个一维数组(而不是二维数组)。
例如有下面几个产品和分类:
复制内容到剪贴板
代码:
产品名字
电视
游戏机
分类ID 分类名
1 家电
2 娱乐产品和分类之间是多对多关系:
复制内容到剪贴板
代码:
电视 => 家电
游戏机 => 家电,娱乐
那么中间表数据就是:
产品名字 分类ID
电视 1
游戏机 1
游戏机 2当从产品表为产品指定分类时,分类数据就行应该是:
复制内容到剪贴板
代码:
$电视 = array(
'name' => '电视',
'classes' => array(1)
);
$游戏机 = array(
'name' => '电视',
'classes' => array(1, 2)
);所以在修改多对多关联时,中间表数据必须是一个一维数组,其中每一个值就是所关联数据表的一个主键值。
具体到前面的例子,从产品表指定产品分类时,中间表数据就是分类ID组成的一维数组。