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、データベースからONE RECORDをロードします。その後、 を呼び出して値を割り当てることができますvalues()

find_all()クラス インスタンスを返しますDatabase_Result。これは、見つかったレコードのコレクションです。Kohana では、それらを配列として扱うことができます。

ここにあなたが書く必要があるものがあります

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

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

1 つのデータベース レコードのみを変更することに注意してください。1 つのデータベース要求で複数のレコードを変更するには、すべてのレコードに対してこのコードを呼び出すか、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 {...}

いくつかのレコードを更新する場合は、クエリ ビルダーを使用するかDB::query()、特別な複数クエリを使用する必要があります。

于 2012-10-10T07:26:22.857 に答える