发新话题
打印

[FleaPHP]如何使用 manyToMany

[FleaPHP]如何使用 manyToMany

[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组成的一维数组。
支持FLEAPHP

TOP

发新话题