【问题标题】:changing object in loop in Datamapper ORM在 Datamapper ORM 中循环更改对象
【发布时间】:2011-05-11 18:00:03
【问题描述】:

我正在尝试在 Codeigniter 的 Datamapper 中保存一个长表单。如果我传递这样的值,我可以保存表单

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

现在如果我调用 save 方法就可以了

 $t->save();

由于表单很大,我尝试在 foreach 中添加对象值

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

但是,如果我打电话给$t->save(),它就不起作用了。

【问题讨论】:

    标签: php codeigniter orm codeigniter-datamapper


    【解决方案1】:

    我不确定$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(),并可选择传递一个字段数组以更新到函数(以数据映射器验证格式)。但是,我忘记了为什么要使用它……但是我删除了一些自定义内容。如果您经常这样做,这应该对您有用。这绝对节省了我的时间。

    【讨论】:

    • @MakDotGNU:我添加了一些您可能感兴趣的代码。
    • 谢谢@wesley,这对我有帮助。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多