我正在尝试使用Laravel 4框架维护MVC模式,在我的上一个项目中,我从控制器进行了所有数据库查询,我现在已经知道这是一个糟糕的做法,我正在试图弄清楚如何从模型中做同样的事情。这是我通常会做的。
控制器
public function serve($company)
{
$review = Review::select('head', 'body', 'logo', 'name')->where('company', '=', $company)->firstOrFail();
return View::make('layouts.singlereview', compact('review'));
}
模型
class Review extends Eloquent {
protected $table = 'reviews';
protected $guarded = [
'id', 'company', 'head', 'body'
];
}
当我将$review
变量和数据库查询移动到模型中时,我在未定义变量的视图上得到错误。如何将$review
变量从模型传递给控制器?
谢谢!
答案 0 :(得分:2)
实际上你仍然需要在控制器中使用你的模型做一些事情。使用Repository Pattern do,这与在控制器中查询模型非常类似,但不那么冗长:
public function serve($company)
{
return View::make('layouts.singlereview')->withReview(with(new Review)->getCompanyData($company));
}
将整个逻辑放在您的存储库中:
class Review extends Eloquent {
public function getCompanyData($company)
{
return static::select('head', 'body', 'logo', 'name')
->where('company', '=', $company)
->firstOrFail();
}
}
答案 1 :(得分:0)
此外,当您谈到创建优秀代码时,您还可以查看Eloquent关系。他们可能需要对某些事件进行数据库重组,但大多数时候你应该做好。
使用您提供的代码,我可以假设审核和公司处于一对一的关系中,因此一旦定义了这个,您就可以简单地检索公司对象,然后执行,
$review = $company->review;