2013-04-15 1 views
0

Я использую DATAMAPPER ORM V1.8.2. У меня есть вопрос для from_array метода:from_array() метод в Datamapper ORM Codeigniter

Во-первых, у меня есть выпадающий список с * имя = "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() является ИСТИНА немедленно сохранить, как:

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

Он не может получить group_id от $ _POST. Пожалуйста, помогите мне, спасибо.

+0

У вас есть какие-либо проверки на пользовательском объекте? Если это так, проверьте '$ user-> error-> all', возможно, проверка завершает сохранение. – complex857

+0

Я получил 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 на group поле вашего User модели, которая является имя соотношения в.
  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. появится)
  6. Проверка related_required терпит неудачу и останавливает процесс сохранения.
+0

Большое спасибо. Я переименовываю поле group_id в группу, все в порядке. Резюме, если группа является отношением, я добавлю группу в поля $ insted group_id? –

+0

Я не уверен, что понимаю ваш вопрос, но я думаю, да. Вы должны использовать то же имя поля на входе (в вашем случае '$ _POST') и список полей для' from_array() 'как правило проверки и отношение. Никакой group_id не нужен таким образом. – complex857

+0

Еще раз спасибо: D –