求助,回复表为空时的问题
有一个topic
模型,对应topics
表
有一个reply
模型,对应repies
表
需求:
访问http://www.a.com/topic/1
时,我希望在页面里显示3条对应的回复,同时有一个按钮点击以后可以打开新页面看到对应话题的所有回复
TopicCotroller
public function show(TestReply $testreply, Request $request)
{
//显示对应话题数据
$testpsies = TestPsy::find($testreply->id);
//得到相关帖子的回复
$testreplies = TestReply::where('testpsy_id',$testreply->id)->recent()->paginate(10);
//ajax翻页
if ($request->ajax()) {
$view = view('mobile.layouts._test_reply_list_ajax',compact('testpsies','testreplies'))->render();
return response()->json(['html'=>$view]);
}
return view('mobile.test_replies.show', compact('testpsies','testreplies'));
}
route
Route::resource('/topicreplies', 'TopicRepliesController', ['only' => ['show', 'store', 'destroy']]);
这时候我发现个问题:
如果repies
里是一张空表,或者说只有10条数据,那么访问http://www.a.com/topic/10
点击进入http://c.microdesign.cn/testreplies/10
会提示404,除非才reply
里有一条id=10
的数据。
所以,我要怎么处理一下忽略掉id呢
推荐你更加简便的写法
首先在两个模型中定义关联关系
回复和话题各建一个资源性控制器
话题控制器:
回复控制器里,如果你使用的是前后端分离的方式,只需要编辑
index
方法即可:如果是直接渲染页面就不宜使用资源型路由,应重新定义路由携带话题 ID 信息以便筛选回复
善用 Laravel 的关联
Laravel 为我们定义了很多便捷的方法 不用的话那就失去用 Laravel 的意义了
以上都是伪代码 没有调试过可能有错误
然后回复可能为空的情况 可以使用 默认模型 解决