簡體   English   中英

CakePHP一次編輯多個記錄

[英]CakePHP edit multiple records at once

我在兩個表之間建立了HABTM關系: itemslocations ,使用表items_locations將它們items_locations在一起。

items_locations還存儲更多信息。 這是架構

items_locations(id, location_id, item_id, quantity)

我正在嘗試構建一個頁面,該頁面在一個位置顯示所有項目,並允許用戶通過datagrid樣式界面一次編輯多個字段:

Location: Factory XYZ
 ___________________________
|___Item____|___Quantity___|
| Widget    |          3   |
| Sprocket  |          1   |
| Doohickey |         15   |
----------------------------

為了解決這個問題,我有一個名為InventoryController的控制器,該控制器具有:

var $uses = array('Item', 'Location');  // should I add 'ItemsLocation' ?

如何建立多維表格來編輯此數據?


編輯:

我正在嘗試使數據看起來像Deceze在下面的描述,但我又遇到了問題...

// inventory_controller.php
function edit($locationId) {

    $this->data = $this->Item->ItemsLocation->find(
        'all',
        array(
            "conditions" => array("location_id" => $locationId)
        )
    );

當我這樣做時, $this->data如下所示:

Array (
    [0] => Array (
        [ItemsLocation] => Array (
            [id] => 16
            [location_id] => 1
            [item_id] => 1
            [quantity] => 5
        )
    )
    [1] => Array (
        [ItemsLocation] => Array (/* .. etc .. */)
    )
)

如果您不打算在Item模型中編輯數據,則僅在聯接模型上工作可能最有意義。 這樣,您用於編輯每個項目數量的表格將如下所示:

echo $form->create('ItemsLocation');

// foreach Item at Location:

echo $form->input('ItemsLocation.0.id'); // automatically hidden
echo $form->input('ItemsLocation.0.quantity');

為每個記錄增加計數器( .0..0. .1. ,...)。 您應該在控制器$this->data應如下所示:

array(
    'ItemsLocation' => array(
        0 => array(
            'id' => 1,
            'quantity' => 42
        ),
        1 => array(
            ...

然后,您可以像保存其他任何模型記錄一樣簡單地保存它: $this->Item->ItemsLocation->saveAll($this->data) 將項目添加到位置並沒有太大的不同,您只需省略id然后讓用戶選擇item_id

array(
    'location_id' => 42,  // prepopulated by hidden field
    'item_id' => 1        // user selected
    'quantity' => 242
)

如果要編輯Item模型的數據並同時將其與相應的ItemsLocation記錄一起保存 ,請進入“ 保存相關模型數據(HABTM)”一章。 請注意以下幾點:

默認情況下,保存HasAndBelongsToMany關系時,Cake將在保存新行之前刪除聯接表上的所有行。 例如,如果您有一個包含10個子級的俱樂部。 然后,您更新有2個孩子的俱樂部。 俱樂部只有2個孩子,沒有12個孩子。

和:

3.7.6.5 hasAndBelongsToMany(HABTM)

unique :如果為true(默認值),則在更新記錄時,cake將首先刪除外鍵表中的現有關系記錄,然后再插入新的關系記錄。 因此,更新時需要再次傳遞現有的關聯。


回復:評論/編輯

我不知道FormHelper是否足夠智能,可以從[0][Model][field]結構化數組中自動填充Model.0.field字段。 如果沒有 ,您可以自己輕松地操縱結果:

foreach ($this->data as &$data) {
    $data = $data['ItemsLocation'];
}
$this->data = array('ItemsLocation' => $this->data);

那將為您提供正確的結構,但是請記住這不是很好。 如果有人有一個更像蛋糕的方式來做,那我全都聽了。 :)

暫無
暫無

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

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