新手来了。我正在学习拉拉维尔和WardrobeCMS是一个很好的研究海事组织。只是想知道你们能不能告诉我他们是如何用请求分局检索帖子的?
在主页中,HomeController有这一行。
$posts = $this->posts->active(Config::get('core::wardrobe.per_page'));在WardrobeServiceProvider中,它们将PostRepoitory与DbPostRepository绑定,下面是它们的“活动”方法。
public function active($per_page)
{
$per_page = is_numeric($per_page) ? $per_page : 5;
\Debugbar::info('calling posts active method');
return Post::with(array('tags', 'user'))
->where('active', 1)
->where('publish_date', '<=', new DateTime)
->orderBy('publish_date', 'desc')
->paginate($per_page);
}返回语句看起来像雄辩的命令,但是,我在Debugbar控制台中没有看到任何db请求。这是怎么回事?请给我建议。
我是一个设计师,试图学习编码和拉拉维尔‘照亮’我。在我当前的dev项目中,每个页面都有大约4-10 db的调用。我的目标是尽可能减少db调用,我认为WardrobeCMS源代码是我的出发点。
发布于 2014-02-20 01:36:44
Post::with()->where()->paginate(); doesn't always 'call' database?:是的,是的!
Post是一个Eloquent 奥姆,因为基本上Laravel中的每个模型(即Post)都扩展了Eloquent/Model类,而这个Eloquent/Model类与其他类一起使用Query Builder (在您的情况下是DB)类来查询数据库,在您的示例中,Post是这样的:
class Post extends Eloquent {
// ...
}SInce Post类扩展了Eloquent类,以便Post能够访问(仅限于受保护的和公共的) Eloquent类的所有方法,因此,如果Eloquent具有这样的函数/方法(实际上有):
public function with($relation)
{
//...
}然后,Post类可以像这样调用该函数/方法:
Post::with()所以,在本例中,实际上Post::with()->where()->paginate()调用与database交互,但没有必要每个数据库交互都必须使用DB::table(),相反,这是使用ORM查询数据库的一种方便的方式,不要忘记,ORM只是查询生成器的包装器,在场景后面,Post Eloquent Model使用查询生成器。
您应该使用手册,而不是阅读其他应用程序的源代码,一旦您了解了基本概念,您就可以阅读其他Laravel应用程序的源代码,以获得其他开发人员使用的一些想法。
Update: --如果您在调试器中没有看到任何查询,那么应用程序将在一段时间内使用Laravel的缓存特性缓存数据库查询,这样它就可以在不与数据库交互的情况下使用这些查询来加快进程。
https://stackoverflow.com/questions/21869432
复制相似问题