Kohana将值编辑到数据库中

时间:2012-10-07 19:50:26

标签: php forms kohana

我正在尝试编辑数据库中的值,我收到以下错误:

Call to a member function values() on a non-object

控制器

public function action_options() {

    $this->template->styles = array(
        'style' => 'style',
        'acp' => 'acp'
    );

    $options = ORM::factory('option')->find_all()->as_array('option_name','option_value');

    $this->template->content = View::factory('default/admin/options')
        ->bind('options', $options);
}

    public function action_savesettings() {

    $options = ORM::factory('option')->find_all()->as_array('option_name','option_name');

    $options->values($this->request->post());

    $errors = array();

    try {

        $options->save();

        $this->request->redirect('acp/options');

   } catch (ORM_Validation_Exception $ex) {

       $errors = $ex->errors('validation');

   }

    $this->template->content = View::factory('default/admin/options')
        ->bind('options', $options)
        ->bind('errors', $errors);
}

查看

<?php $errors = isset($errors) ? $errors : array(); ?>
<?php echo Form::open('acp/savesettings'); ?>
Site Name: <?php echo Form::input('site_name', $options['site_name'], array('id' => 'acp-sitename')); ?><br />
<?php echo Form::submit('submit', 'Submit', array('id' => 'acp-submit')); ?>
<?php echo Form::close(); ?>

我的表就像:

option_id   option_name     option_value

我不知道如何处理这个问题,因为我正在使用$ options ['']访问和编辑值。

2 个答案:

答案 0 :(得分:2)

您尝试设置的值不在Model类实例上,而是在数组上。在设置值之前,您可以通过var_dump($options);查看。

values()方法是ORM类的方法。

另外,为了获得ORM类实例,您应该调用find()方法,也不要调用find_all()

find()返回ORM类实例,并从数据库中加载一条RECORD。然后,您可以通过调用values()为其指定值。

find_all()返回Database_Result类实例 - 它是已找到记录的集合。在Kohana,您可以将它们视为阵列。

这是你需要写的东西

$option = ORM::factory('option')->find();

$option->values($this->request->post());

请注意,您只能更改一个数据库记录。要在一个数据库请求中更改多个记录,您需要为每个记录调用此代码,或使用DB:update()方法创建查询。

答案 1 :(得分:0)

我可以看到,您想修改网站设置。所以,你的代码应如下所示:

// search for changing option 
$option = ORM::factory('option')->where('option_name', '=', 'site_name')->find();
// set new value
$option->set('option_value', $this->request->post('site_name'));
// update value, handle validation errors, etc
try {...}

如果您想更新一些记录,则应使用查询构建器或DB::query()使用特殊multiple query