我想在返回View :: make('view')之后执行一些代码; 那是否可能在laravel?我知道我可以把我的代码放到我的视图中,但这是一种不好的做法,这是我的代码:
if (!$conversation == null) {
// here I update last_viewed time
$conversation_memb=$conversation->members()->where('user_id',Auth::user()->id)->first();
$conversation_memb->last_viewed = time();
$conversation_memb->save();
// here I return View with some data
return View::make('messages.conversation')->with('conversation',$conversation)->with('messages',$conversation->messages()->orderBy('created_at','DESC')->take(10)->get()->reverse());
}
所以我想在加载视图后更新last_view的时间,所以消息将显示为“未读”
答案 0 :(得分:0)
你正在以错误的方式思考这个问题。显示视图后,您无需更新数据;而不是这个,只需让视图知道发生了什么。
大概现在,视图通过将某个时间戳与通过直接到达last_viewed
得到的$conversation
值进行比较来了解消息是否未读。不要那样做。在将数据库更新为变量之前保存先前的last_viewed
值,将该变量传递到视图中并将视图与该变量进行比较。
答案 1 :(得分:0)
使用Laravel,您可以在将响应发送给用户之后运行此类任务。通过关闭与浏览器的连接后,使PHP进程保持活动状态以运行任务来工作。您可以使用以下方法做到这一点:
Job::dispatchAfterResponse()
使用Laravel v6.14.0或更高版本。