2 回答
TA贡献1788条经验 获得超4个赞
如果您希望新注册的用户看到所选类别下的所有以前的警报,基本上就是说登录用户应该看到这些类别下的所有警报。
我不认为将 aalert与 a联系起来user会给你带来任何好处。如果有的话,它会给你增加一层额外的复杂性。
现在,如果您想跟踪 which usersread which alert,您可以使用该alert_user表。基本上,当 auser读取一个alert. created_at将告诉您用户阅读的确切时间alert,因此read也不需要标志。
并且,为了显示警报,您可以查询,例如,与登录用户没有关系记录的警报。你可以使用whereDoesntHave. 例如,像这样:
Alert::whereHas('categories', function($query) use ($category_id_array){
$query->whereIn('category_id', $category_id_array);
})->whereDoesntHave('users', function($query) use ($user_id){
$query->where('user_id', $user_id); //user_id is auth()->user()->id
})->get();
如果您只想显示推文而不排除经过身份验证的用户:
Alert::whereHas('categories', function($query) use ($category_id_array){
$query->whereIn('category_id', $category_id_array);
})->get();
TA贡献1906条经验 获得超10个赞
如果您希望选择一个用户,然后确定他是否有任何未读警报,那么您可以这样做:
foreach($user->alerts as $alert){
if($alert->read == 1){
//do something with that particular alert
}
}
如果要确定是否已读取特定警报,可以像这样搜索它:
Alert::where('id', '=', $alert_id)->where('read', '=', 1)->first();
//will return alert or null
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报