0

我正在尝试编辑数据库中的值,但出现以下错误:

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[''] 访问和编辑这些值。

4

2 回答 2

2

您试图不在Model类实例上而是在数组上设置值。var_dump($options);您可以在设置值之前看到它。

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

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

find()返回ORM类实例并将数据库中的一条记录加载到其中。然后你可以通过调用给它赋值values()

find_all()返回Database_Result类实例 - 它是找到的记录的集合。在 Kohana 中,您可以将它们视为一个数组。

这是你需要写的

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

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

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

于 2012-10-07T20:00:21.897 回答
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 {...}

如果你想更新一些记录,你应该使用 Query Builder 或者DB::query()一个特殊的多重查询

于 2012-10-10T07:26:22.857 回答