Laravel 4将数据库查询从模型传递到控制器 - 对非对象的成员函数进行错误调用

时间:2014-02-03 18:12:06

标签: php laravel laravel-4 eloquent

对于为什么这不起作用感到困惑,试图将数据库查询功能传递给我的控制器。我收到错误Call to a member function getCompanyData() on a non-object

Review.php (型号)

class Review extends Eloquent {

    public function getCompanyData($company)
    {
        return $this->select('head', 'body', 'logo', 'name')
            ->where('company', '=', $company)
            ->firstOrFail();
    }
}

ReviewController.php

class ReviewController extends BaseController {

    protected $review;

    public function __construct(Review $review)
    {
        $this->beforeFilter('csrf', array('on' => 'post'));
        $this->review = $review;
    }

    public function show($company)
    {
        $data = $this->review->getCompanyData($company);

        return View::make('reviews.show', compact('data'));
    } 
}

2 个答案:

答案 0 :(得分:3)

我不确定问题但是因为你提到你想要能够调用Review::method()但是不想将方法声明为static,所以,在这种情况下,它是可能的使用静态::语法调用Eloquent Model中使用Laravel scope中声明的非静态方法,如下所示:

class Review extends Eloquent {

    public function scopeGetCompanyData($query, $company)
    {
        return $query->select('head', 'body', 'logo', 'name')
                     ->where('company', '=', $company);
    }
}

现在,您可以通过以下方式从控制器调用getCompanyData方法:

$data = Review::getCompanyData($company)->firstOrFail();

答案 1 :(得分:0)

所以评论不是一个对象,你试图将它的方法称为对象。它可能是数组。我看到你提供了请求$ request 引用,你希望它是对象。在将值传递给视图时,有时会发生这种情况。尝试跟踪评论类型。

更新

其他一些需要考虑的事项是:为什么你通过构造函数传递Review,当它是扩展Eloquent的模型时它应该是可见的? Review真的扩展了Eloquent吗?