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