Datamapper ORM Codeigniter中的from_array()方法

时间:2013-04-15 10:13:16

标签: codeigniter codeigniter-datamapper

我正在使用DATAMAPPER ORM V1.8.2。我对 from_array 方法有疑问:

首先,我有* 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。 请帮帮我,谢谢。

1 个答案:

答案 0 :(得分:0)

group_id表单字段重命名为$has_one(可能是group)或$has_many(可能是groups)中的关系名称并添加调用$fields时,from_array()数组的名称。所以像这样:

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

注意对称性:

  • 名为 group
  • 的关系
  • 名为 group
  • 的输入参数
  • 名为 group
  • 的字段

这就是发生的事情:

  1. required模型的User字段中有group,这是关系的名称。
  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结束时,通过字段循环,在没有任何对象的情况下。
  5. 验证启动,tries to _count_related()为您的用户组启动,但它找不到该组,"and take these with you too" second array为空(这是第3步中收集的对象出现的位置)< / LI>
  6. related_required验证失败并停止保存过程。