我正在尝试编辑数据库中的值,我收到以下错误:
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 ['']访问和编辑值。
答案 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。