我試圖顯示用戶登錄時的未讀消息數(如果有)。問題是,當我使用新創建的帳戶登錄時我收到了X條未讀消息的通知,但沒有。消息計數器顯示Laravel中記錄的用戶的消息總數而不是計數
爲了更好地解釋它。如果admin
發送消息到user1
和user1
尚未讀取它,當user2
登錄時它將通知有1條未讀消息。當user1
閱讀它時,通知將消失。
我已經加入這個我ViewComposerServiceProvider
開機功能
public function boot()
{
dd(Auth::user()); <--- return NULL
$unviewedCustomersMessagesCount = Message::where('read_state', '0')->where('from_admin', '1')->count();
View::share('unviewedCustomersMessagesCount', $unviewedCustomersMessagesCount);
}
然後,我只是表明如果需要,這是我Message
模型view.blade
{{ $unviewedCustomersMessagesCount }}
櫃檯
class Message extends Eloquent
{
protected $table = 'messages';
protected $primaryKey = 'message_id';
public function user()
{
return $this->belongsTo('App\User', 'user_id', 'user_id');
}
public function markAsRead()
{
$this->read_state = '1';
$this->save();
}
}
And User
model
class User extends Eloquent implements AuthenticatableContract, CanResetPasswordContract
{
use EntrustUserTrait;
use Authenticatable, CanResetPassword;
[....]
public function messages()
{
return $this->hasMany('App\Message', 'user_id', 'user_id');
}
}
有沒有更好的方法來統計用戶的消息?
控制器
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct()
{
$unviewedCustomersMessagesCount = Message::
whereRaw('messages.message_id = (select max(message_id) from `messages` m2 where m2.user_id = messages.user_id)')
->where('read_state', '0')
->where('from_admin', '0')
->where('user_id', Auth::user()->user_id)
->count();
View::share('unviewedCustomersMessagesCount',$unviewedCustomersMessagesCount);
}
}
謝謝,但我仍然看到,即使我沒有,我也有消息。 – Peter
你也檢查你的數據庫嗎? –
是的,當某個用戶發出'from_admin'的消息並且讀取狀態爲'0'時 - 所有用戶都會看到未讀消息的通知 – Peter