Метод from_array() в Datamapper ORM Codeigniter

Я использую 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. Пожалуйста, помогите мне, спасибо.

1 ответ

Решение

Переименовать 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 на ваше User модели group поле, которое является именем отношения.
  2. Вы пытаетесь обновить и сохранить User экземпляр и с полем ввода с именем group_id, однако отношение называется группа.
  3. Внутри расширения массива from_array() Метод кода проверяет каждый ключ является его has_one или has_many отношение, чтобы собрать связанные объекты для окончательного сохранения. Поскольку ваши данные имеют group_id но ваше отношение называется group они не совпадают, связанный экземпляр группы не выбирается.
  4. В конце from_array() save вызывается со связанными объектами, собранными во время цикла по полям, в вашем случае без объектов.
  5. Проверка запускается и пытается _count_related() для групп вашего пользователя, но он не найдет группу и второй массив "и возьмите их с собой" - пусто (здесь должны появиться объекты, собранные на шаге 3.)
  6. related_required проверка завершается неудачно и останавливает процесс сохранения.
Другие вопросы по тегам