CakePHP 2.4.9 saveAssociated from“belongsTo Model” - 奇怪的记录问题

时间:2014-07-10 04:04:39

标签: cakephp records

这里是关系信息:

  1. global_products hasMany inventory_products
  2. inventory_products belongsTo global_products
  3. 我已经从我的控制器运行此保存呼叫

    $options = array('deep' => true);
    if($this->InventoryProduct->saveAssociated($this->request->data, $options)) {
        $this->Session->setFlash('Successfully added products');
    }
    else {
        $this->Session->setFlash('Failed to add products');
    }
    

    这里是保存前的$ this-> request->数据的内容

    Array
    (
        [GlobalProduct] => Array
            (
                [upc] => 111222333444
                [brand] => Sample Brand
                [name] => Sample Name
                [InventoryProduct] => Array
                    (
                        [0] => Array
                            (
                                [purchase_price] => 10.00
                                [sale_price] => 15.00
                                [practice_id] => 35
                            )
    
                        [1] => Array
                            (
                                [purchase_price] => 10.00
                                [sale_price] => 15.00
                                [practice_id] => 35
                            )
    
                    )
    
            )
    
    )
    

    这是结果表条目

    1. global_products
      • id = x //注意:x由数据库(自动增量字段)
      • 定义
      • upc = 111222333444
      • brand =样本品牌
      • name =样本名称
    2. inventory_products
      • purchase_price = 10.00
      • sale_price = 15.00
      • global_product_id = x
    3. inventory_products
      • purchase_price = 10.00
      • sale_price = 15.00
      • global_product_id = x
    4. inventory_products
      • purchase_price = 0
      • sale_price = 0
      • global_product_id = x
    5. 我似乎无法理解为什么在保存数据阵列中只有2个inventory_records时,为什么会创建第3个inventory_product记录。

      我已经盯着这段代码好几个小时,而且我没有看到这个问题。我确定它可能是愚蠢的。如果有人能指出我正确的方向,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我现在无法测试,但我很确定问题是保存相关模型和使用deep选项的组合。

仅对非直接关联使用deep,例如保存包含Post hasMany Comment belongsTo User关联中的新用户的评论的新帖子。 User是非直接关联,需要使用deep,但直接关联的Comment条目却不会。

另外,您应该保存在主模型上,即GlobalProduct,然后根据CakePHP约定对数据进行不同的格式化,InventoryProduct不应嵌套在{{1}中}}

长话短说,通常应该这样做:

GlobalProduct

其中数据应格式如下:

$this->InventoryProduct->GlobalProduct->saveAssociated($this->request->data)