簡體   English   中英

在Datamapper ORM中循環更改對象

[英]changing object in loop in Datamapper ORM

我正在嘗試在Codeigniter的Datamapper中保存一個長格式。 如果我傳遞這樣的值,我就能保存表格

$t->brandName = $this->input->post('brandName');  
$t->specialNotes = $this->input->post('specialNotes');
$t->name = $this->input->post('name');

現在,如果我調用保存方法,它將起作用

 $t->save();

由於形式很大,我試圖在foreach中添加對象值

 $a = get_object_vars($t);
 foreach ($a['stored'] as $k => $val){
      $t->$k = $this->input->post("$k"); 
 }

但是,如果我調用$t->save()它將不起作用。

我不確定$a['stored']代表什么,但這並不是Datamapper的默認設置。

為什么不按相反的方式循環遍歷發布鍵?

foreach ($_POST as $key => $val)
{
    $t->$key = $this->input->post($key); 
}
$t->save();

注意:任何不存在的列都將被Datamapper忽略。


我實際上為此編寫了一個Datamapper擴展:

class DM_Data {

    function assign_postdata($object, $fields = NULL)
    {
        // You can pass a different field array if you want
        if ( ! $fields)
        {
            $fields = $object->validation;
        }
        foreach ($fields as $k => $data)
        {
            $rules = isset($data['rules']) ? $data['rules'] : array();

            if ( ! isset($_POST[$k])) continue;

            // Cast value to INT, usually for an empty string.
            if (in_array('integer', $rules))
            {
                $object->$k = (integer) $_POST[$k];
            }
            // Do other manipulation here if desired
            else
            {
                $object->$k = $_POST[$k];
            }

        }
        return $object;
    }

}

您可以使用$t->assign_postdata()->save() ,還可以選擇傳遞一個字段數組以更新到函數(以datamapper驗證格式)。 但是,我忘記了為什么要使用它...但是我刪除了一些自定義內容。 如果您經常這樣做,這對您很有用。 絕對可以節省我的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM