Сохранение нескольких новых отношений с проверкой (Codeigniter/DataMapper)
Я создаю приложение с codeigniter, которое включает в себя добавление "опекуна" с несколькими телефонными номерами в базу данных. Со стороны пользовательского интерфейса, есть кнопка добавления рядом с каждым телефонным полем, которое использует магию javascript для клонирования себя, чтобы пользователь мог ввести другой номер. Когда форма отправлена, телефонные номера представлены в виде массива.
У меня есть две настройки: carer и carer_telephone. Каждая модель имеет свою собственную таблицу.
Я ломал голову над тем, как заставить datamapper проверить все отношения перед их сохранением. Например, на данный момент отображаются только ошибки проверки для полей опекуна, а для полей carer_telephone - нет.
Кроме того, я не уверен, является ли это наиболее эффективным способом использования памяти, т. Е. Созданием нового объекта carer_telephone для каждого номера.
Это должно быть общей установкой для многих приложений, но я не могу найти никакой документации по этому вопросу. Я ищу самый стандартный способ сделать это в отношении DataMapper.
Контроллер пока
function add() {
//Create carer object
$c = new carer();
//Create carer telephone object
$t = new carer_telephone();
//Form submitted
if($this->input->post('add_carer')) {
//Set carer data
$c->title = $this->input->post('title');
$c->first_name = $this->input->post('first_name');
$c->family_name = $this->input->post('family_name');
$c->display_name = $this->input->post('display_name');
$c->date_of_birth = $this->input->post('date_of_birth');
$c->email_address = $this->input->post('email_address');
$c->street_address = $this->input->post('street_address');
$c->town = $this->input->post('town');
$c->county = $this->input->post('county');
$c->postcode = $this->input->post('postcode');
//Set and save telephones
foreach($this->input->post('telephone') as $tel) {
$t = new carer_telephone();
$t->type = 'test';
$t->number = $tel;
$c->save($t);
}
}
//Store carer object
$this->_data['content']['carer'] = $c;
//Load view
$this->load->view('carers/add',$this->_data);
}
Любая помощь по этому вопросу будет принята с благодарностью. Даже просто ссылка на пример, где кто-то работал над этой ситуацией.
С наилучшими пожеланиями, Дэн
1 ответ
Существует расширение массива, поставляемое с DataMapper, которое может пригодиться вам: http://datamapper.wanwizard.eu/pages/extensions/array.html - позволяет сохранять данные массива в базе данных и т. Д.