对于为什么这不起作用感到困惑,试图将数据库查询功能传递给我的控制器。我收到错误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'));
}
}
答案 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吗?