0

我正在使用 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。 请帮帮我,谢谢。

4

1 回答 1

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));

注意对称性:

  • 称为群的关系
  • 称为组的输入参数
  • 称为组的字段

这就是正在发生的事情:

  1. 您的模型字段required上有一个,这是关系的名称。Usergroup
  2. 您尝试User使用名为 的输入字段更新和保存实例group_id,但关系名为group
  3. 在数组扩展的from_array()方法中,代码检查每个键是它的一个has_one或一个has_many关系,以收集相关对象以进行最终保存。由于您的数据有group_id但您的关系被命名为group它们不匹配,因此不会获取相关的组实例。
  4. from_array() 保存结束时调用相关对象,同时在字段中循环时收集相关对象,在您的情况下没有对象。
  5. 验证开始,并尝试_count_related()为您的用户组,但它不会找到该组,并且“并随身携带这些”第二个数组是空的(这是在步骤 3 中收集的对象将出现的位置)
  6. 验证失败并related_required停止保存过程。
于 2013-04-15T18:39:38.033 回答