2013-04-15 67 views
0

我正在使用DATAMAPPER ORM V1.8.2。我有from_array方法的問題:Datamapper中from_array()方法ORM Codeigniter

首先,我有一個下拉與* NAME = 「GROUP_ID」 *

<select name="group_id" class="small-input"> 
     <option value="1">Guest</option> 
     <option value="2" selected="selected">Member</option> 
     <option value="3">Manager</option> 
     <option value="4">Administrator</option> 
</select> 

在表的用戶(數據庫),我有一個字段命名爲:GROUP_ID

在控制器:

.... 
$user->from_array($_POST, array('username', 'email', 'status', 'group_id')); 
.... 
// then save 
.... 

所有的事情就可以了。

但是當我通過from_array的第三個參數()TRUE立即保存,如:

$user->from_array($_POST, array('username', 'email', 'status', 'group_id', TRUE)); 

它不能從$ _ POST GROUP_ID。 請幫助我,謝謝。

+0

您是否對用戶對象有任何驗證?如果是這樣,檢查'$用戶 - >錯誤 - >所有'可能驗證停止保存。 – complex857

+0

我收到1封郵件:羣組關係是必需的,而羣組輸入已完成。 –

回答

0

group_id形式字段重命名爲在任一$has_one(所以大概group)或$has_many(可能groups)之間的關係的名稱和調用from_array()當添加名字到$fields陣列。因此,像這樣:

// $_POST = array('group' => 3); // let's say this is what's coming in  
$user->from_array($_POST, array('username', 'email', 'status', 'group', TRUE)); 

注意對稱性:

  • 稱爲組的關係
  • 稱爲
  • 領域稱爲
輸入參數

這是發生了什麼:

  1. 你有你的User模型group場,這是關係的名字required
  2. 您嘗試更新並保存User實例,並使用名爲group_id的輸入字段,但是該關係被命名爲
  3. 在數組擴展的from_array()方法代碼checks every key is its a has_one or a has_many relation中收集相關對象以進行最終保存。由於您的數據有group_id,但您的關係名爲group,因此它們的不匹配,則不會提取相關的組實例。
  4. 結束時from_array()save is called with the related objects gathered while循環槽字段,在你的情況下沒有對象。
  5. 驗證踢,和tries to _count_related()爲您的用戶羣,但它不會找到組和"and take these with you too" second array是空的(這是物體聚集在步驟3將出現)
  6. related_required驗證失敗和停止保存過程。
+0

非常感謝。我將group_id字段重命名爲group,所有內容都可以。總結,如果組是關係,我會將group添加到group_id中的$ fields? –

+0

我不確定我是否理解你的問題,但我認爲是。你必須在輸入中使用相同的字段名稱(在你的情況下是'$ _POST'),'from_array()'的字段列表作爲驗證規則和關係。這種方式不需要group_id。 – complex857

+0

再次感謝您:D –

相關問題