簡體   English   中英

HABTM網橋數據未保存

[英]HABTM bridge data not saving

這是我第一次在CakePHP中嘗試HABTM,但進展並不理想。

我有表foos和表bars 當一個foo被保存時,我想與它關聯幾個bars 我正在嘗試使用bars_foos橋進行此bars_foos

我希望能夠以一種可以傳遞foo以及一堆bars的方式進行保存,例如:

array(2) {
  ["Foo"]=> array(1) {
    ["name"]=> string(7) "someFoo"
  }
  ["Bar"]=> array(4) {
    [0]=> array(1) {
      ["ID"]=> int(3)
    }
    [1]=> array(1) {
      ["ID"]=> int(9)
    }
    [2]=> array(1) {
      ["ID"]=> int(4)
    }
    [3]=> array(1) {
      ["ID"]=> int(15)
    }
  }
}

可以說創建了ID為9的someFoo ...我希望將以下記錄添加到bars_foos表中:

+--------+----------+
| bar_ID | foo_ID   |
+--------+----------+
|      3 |        9 |
|      9 |        9 |
|      4 |        9 |
|     15 |        9 |
+--------+----------+

當前, bars_foos表中什么都沒有發生,只有foos表被新創建的“ someFoo”更新。 唯一應該更新此網橋的時間是在創建新Foo

我試圖用我的模型遵循CakePHP文檔

class Foo extends AppModel {
    public $primaryKey = "ID";

    public $hasAndBelongsToMany = array(
        'Bar' =>
            array(
                'className' => 'Bar',
                'joinTable' => 'bars_foos',
                'foreignKey' => 'foo_ID',
                'associationForeignKey' => 'bar_ID'
        )
    );
}

並在我的控制器中使用它...

$this->Foo->saveAll($data); //$data looks like the Array above in the first code block

我還根據在搜索解決方案中看到的內容嘗試了以下格式的$data

array(1) {
  ["Foo"]=> array(3) {
    ["name"]=> string(7) "FooName"
    ["Bar"]=> array(2) {
      [0]=> array(1) {
        ["ID"]=> int(3)
      }
      [1]=> array(1) {
        ["ID"]=> int(2)
      }
    }
  }
}

array(2) {
  ["Foo"]=> array(1) {
    ["name"]=> string(7) "fooName"
  }
  ["Bar"]=> array(1) {
    ["Bar"]=> array(2) {
      [0]=> array(1) {
        ["ID"]=> int(3)
      }
      [1]=> array(1) {
        ["ID"]=> int(2)
      }
    }
  }
}

並得到相同的結果(創建了新的foo ,但未在bars_foos表中插入任何bars_foos

終於成功了。 看來我們不應該顯式地輸入相關表的ID鍵。 這種格式對我有用:

array(2) {
  ["Foo"]=>
  array(1) {
    ["name"]=> string(7) "fooName"
  }
  ["Bar"]=> array(1) {
    ["Bar"]=> array(4) {
      [0]=> int(3)
      [1]=> int(2)
      [2]=> int(9)
      [3]=> int(7)
    }
  }
}

這在橋接表中給了我我想要的結果:

+--------+----------+
| bar_ID | foo_ID   |
+--------+----------+
|      3 |        9 |
|      2 |        9 |
|      9 |        9 |
|      7 |        9 |
+--------+----------+

這似乎也有相同的效果(不是兩次嵌套Bar ID)

array(2) {
  ["Foo"]=>
  array(1) {
    ["name"]=> string(7) "fooName"
  }
    ["Bar"]=> array(4) {
      [0]=> int(3)
      [1]=> int(2)
      [2]=> int(9)
      [3]=> int(7)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM