Сохранение нескольких новых отношений с проверкой (Codeigniter / DataMapper) - PullRequest
1 голос
/ 02 августа 2011

Я создаю приложение с codeigniter, которое включает в себя добавление «опекуна» с несколькими телефонными номерами в базу данных. Со стороны пользовательского интерфейса, рядом с каждым телефонным полем есть кнопка добавления, которая использует магию javascript для клонирования себя, чтобы пользователь мог ввести другой номер. Когда форма отправлена, номера телефонов представлены в виде массива.

У меня есть две настройки: carer и carer_telephone . Каждая модель имеет свою собственную таблицу.

Я ломал голову над тем, как получить DataMap для проверки всех отношений перед их сохранением. Например, на данный момент отображаются только ошибки проверки для полей опекуна, а для полей 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);

}

Любая помощь по этому вопросу будет принята с благодарностью. Даже просто ссылка на пример, где кто-то работал над этой ситуацией.

С уважением, Dan

1 Ответ

1 голос
/ 04 августа 2011

Существует расширение массива, которое поставляется с DataMapper, которое может быть вам полезно: http://datamapper.wanwizard.eu/pages/extensions/array.html - позволяет сохранять данные массива в базе данных и т. Д.

...