繁体   English   中英

通过验证保存多个新关系(Codeigniter / DataMapper)

[英]Saving multiple new relations with validation (Codeigniter/DataMapper)

我正在使用codeigniter构建一个应用程序,其中涉及将具有多个电话号码的“照顾者”添加到数据库中。 从用户界面的角度来看,每个电话字段旁边都有一个添加按钮,该按钮使用一些JavaScript魔术来克隆自身,以便用户输入其他号码。 提交表单后,电话号码将作为数组提交。

我有两个型号设置: 照顾者carer_telephone。 每个模型都有自己的表格。

我一直在绞尽脑汁寻找一种方法,让我可以让datamapper在保存所有关系之前对其进行验证。 例如,此刻,仅显示carer字段的验证错误,而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);

}

任何帮助,将不胜感激。 甚至只是一个链接的例子,其中有人在这种情况下工作。

最好的问候,丹

DataMapper附带有一个数组扩展,可能对您有用http ://datamapper.wanwizard.eu/pages/extensions/array.html-使您可以将数组数据保存到数据库等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM