Ich versuche, die Anzahl der ungelesenen Nachrichten (wenn vorhanden) anzuzeigen, wenn Benutzer sich anmeldet. Das Problem ist, dass wenn ich mich mit neu erstellten Konto einloggen Ich habe Benachrichtigungen für X ungelesene Nachrichten erhalten, aber keine.Nachrichten Zähler zeigt die Gesamtzahl der Nachrichten anstelle der Anzahl für den angemeldeten Benutzer in Laravel
Um es besser zu erklären. Wenn admin
Nachricht an user1
sendet und user1
es noch nicht gelesen wird, wenn user2
sich anmeldet, wird es Benachrichtigung haben, dass 1 ungelesene Nachricht ist. Wenn user1
gelesen wird, wird die Benachrichtigung verschwinden.
Ich habe hinzugefügt, dies zu meiner ViewComposerServiceProvider
Boot-Funktion
public function boot()
{
dd(Auth::user()); <--- return NULL
$unviewedCustomersMessagesCount = Message::where('read_state', '0')->where('from_admin', '1')->count();
View::share('unviewedCustomersMessagesCount', $unviewedCustomersMessagesCount);
}
Und dann zeige ich einfach den Zähler in view.blade
{{ $unviewedCustomersMessagesCount }}
Wenn brauchen dies mein Message
Modell ist
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();
}
}
Und User
Modell
class User extends Eloquent implements AuthenticatableContract, CanResetPasswordContract
{
use EntrustUserTrait;
use Authenticatable, CanResetPassword;
[....]
public function messages()
{
return $this->hasMany('App\Message', 'user_id', 'user_id');
}
}
Gibt es eine bessere Möglichkeit, die Nachrichten für den Benutzer zu zählen?
-Controller
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);
}
}
Danke, aber ich sehe immer noch, dass ich Nachrichten habe, auch wenn ich es nicht tue. – Peter
überprüfen Sie auch Ihre Datenbank? –
Ja, wenn für einige Benutzer die Nachricht 'from_admin' angezeigt wird und der Lesezustand '0' ist - alle Benutzer sehen eine Benachrichtigung für ungelesene Nachricht – Peter