Laravel 5.5:数据库无数据时first()->paginate()报空对象调用错误
问题分析与解决方案
这个问题我太熟悉了!咱们来一步步搞清楚原因,再给你搞定正确的写法:
为什么会报错?
当你使用Internetradiostations::first()时,如果数据库里没有任何网络电台数据,这个方法会直接返回null。紧接着你调用paginate()方法,就会触发Call to a member function paginate() on null错误——毕竟null根本没有paginate这个方法嘛!
为什么latest()->paginate(5)不会报错?
latest()是Laravel查询构造器的方法,它返回的是一个Builder实例(不管数据库有没有数据,这个实例都存在)。调用paginate()后,哪怕没有数据,也会返回一个空的分页集合,自然不会报错。
正确实现:最早创建的排首位且无数据不报错
你想要的是最早创建的网络电台排在表格首位,本质是按创建时间升序排序,然后分页。直接用查询构造器的orderBy方法就能实现,而且完全避免空数据报错:
// 按created_at升序排序,最早创建的排在最前面,然后分页 $internetradiostations = Internetradiostations::orderBy('created_at', 'asc')->paginate(5); return view('internetradiostationsviewer', compact('internetradiostations')) ->with('i', (request()->input('page', 1) - 1) * 5);
这样写的好处:
- 不管数据库有没有数据,
orderBy()都会返回合法的查询构造器实例 - 调用
paginate()后,要么返回带数据的分页集合,要么返回空分页集合,不会出现null调用方法的错误 - 完美满足"最早创建的排首位"的需求
内容的提问来源于stack exchange,提问作者Teun
相关产品推荐
相关产品推荐

