簡體   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