【问题标题】:Why is saveAll() only saving the last record?为什么 saveAll() 只保存最后一条记录?
【发布时间】:2012-06-01 02:53:48
【问题描述】:

我有一种情况,由于外部原因,我必须直接保存连接记录,而不是将它们保存为连接的一部分。这就是我的意思:

  • 我有一个 Firm 模型,它的数据是从外部来源提取的。
  • 我的应用数据库中有一个 County 模型
  • 我有一个 counties_firms 连接表,用于将这些外部公司与县关联起来。

因为生活在哪里,我没有编辑Firm 模型,也没有编辑County 模型。我真的只是在编辑关联。我有一个Firm 模型来封装我需要对公司数据做的任何事情,其中​​一种方法是Firm::saveCounties( $data )。它:

  • 接受包含公司 ID 和应关联的县 ID 的传入数据。
  • 删除该县的所有现有连接记录
  • 尝试保存所有新加入记录。

我发现只有最后一个县记录被保存。这是传入的数据:

Array
(
    [0] => Array
        (
            [firm_id] => 13
            [county_id] => 4fa16e24-a25c-4523-8a9e-7d1d147402e8
        )

    [1] => Array
        (
            [firm_id] => 13
            [county_id] => 4fa16e27-ccd0-4f22-97da-7d1d147402e8
        )

    [2] => Array
        (
            [firm_id] => 13
            [county_id] => 4fa16e4a-68f8-4fb1-95bb-7d1d147402e8
        )

)

鉴于这些数据,我正在 FirmCountiesFirm 之间创建即时关联,并尝试与 $this->CountiesFirm->saveAll( $data ) 建立关联。

正如我所提到的,在此示例中,只有 3 个县协会中的最后一个得到了保存。知道我可能缺少什么吗?

谢谢。

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    你的数组很好。模型似乎没有清除其 id,您可以尝试将 ['id'] => null 添加到数组中的每条记录以强制清除模型 id。

    这对我有用。

    【讨论】:

    • 非常感谢斯特凡!我只是做一个简单的保存,不需要那么高效,但只能将最后一条记录放入数据库。将 id 设置为 NULL 使其完美运行。
    【解决方案2】:

    我相信您的数组中缺少一个级别...它应该看起来更像这样...

    Array(
        'CountiesFirm' => array(
            [0] => Array
            (
                [firm_id] => 13
                [county_id] => 4fa16e24-a25c-4523-8a9e-7d1d147402e8
            )
            [1] => Array
            (
                [firm_id] => 13
                [county_id] => 4fa16e27-ccd0-4f22-97da-7d1d147402e8
            )
            [2] => Array
            (
                [firm_id] => 13
                [county_id] => 4fa16e4a-68f8-4fb1-95bb-7d1d147402e8
            )
        )
    )
    

    试试看结果告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多