如何使用PHPActiveRecord和CodeIgniter更新记录?

时间:2012-07-25 04:19:47

标签: php activerecord phpactiverecord

我在这里打破了我的头脑。希望你能看出错误是什么。我已经通过一个火花将CodeAgniter安装了PHPActiveRecord,除了一件事以外,一切都很好。让我给你看一些代码。

这是我有问题的控制器。

模型 Article.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Article extends ActiveRecord\Model
{
    static $belongs_to = array(
        array('category'),
        array('user')
    );

    public function updater($id, $new_info)
    {
            // look for the article
        $article = Article::find($id);

            // update modified fields
        $article->update_attributes($new_info);
        return true;
    }
}

这是它向我显示错误的部分。 Controller articles.php

中的相关代码
        // if validation went ok, we capture the form data.
        $new_info = array(
            'title'       => $this->input->post('title'),
            'text'        => $this->input->post('text'),
            'category_id' => $this->input->post('category_id'),
         );

        // send the $data to the model                          
        if(Article::updater($id, $new_info) == TRUE) {
            $this->toolbox->flasher(array('code' => '1', 'txt' => "Article was updated successfully."));
        } else {
            $this->toolbox->flasher(array('code' => '0', 'txt' => "Error. Article has not been updated."));
        }

        // send back to articles dashboard and flash proper message
        redirect('articles');

当我调用Article :: updater($ id,$ new_info)时,它会显示一个很大的烦人错误:

致命错误:在非对象上调用成员函数update_attributes()

最奇怪的是,我有一个名为categories.php的控制器和模型Categoy.php ,它具有相同的功能(我复制粘贴了文章的类别功能),这一次,没有不行。

我在模型Article.php中有不同的功能,所有这些功能都很好,我正在努力使用Article :: updater部分。

有人知道如何正确更新行吗?我正在PHP AR网站的文档中使用,它给了我这个错误。为什么它说这不是一个对象?当我做$ article = Article :: find($ id)时,它应该是一个对象。

也许我没有看到一些非常简单的事情。在电脑前太多小时。

谢谢amigos。

2 个答案:

答案 0 :(得分:3)

您需要更改:

public function updater($id, $new_info)
    {
            // look for the article
        $article = Article::find($id);

为:

public static function updater($id, $new_info)
    {
            // look for the article
        $article = Article::find($id);

答案 1 :(得分:2)

函数更新程序需要标记为静态,并且当$ id错误时它应该处理错误条件。

public static function updater($id, $new_info)
{
        // look for the article
    $article = Article::find($id);
    if ($article === null)
        return false;

        // update modified fields
    $article->update_attributes($new_info);
    return true;
}