【问题标题】:Kohana Edit Values Into DatabaseKohana 将值编辑到数据库中
【发布时间】:2012-10-07 19:50:26
【问题描述】:

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

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

【问题讨论】:

    标签: php forms kohana


    【解决方案1】:

    您尝试不在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() 方法创建查询。

    【讨论】:

      【解决方案2】:

      如我所见,您想修改网站设置。因此,您的代码应如下所示:

      // 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多