【问题标题】:How to display notifications in Laravel?如何在 Laravel 中显示通知?
【发布时间】:2020-03-15 14:49:36
【问题描述】:

我遇到了一个奇怪的问题。 我有两个通知类 InterviewRequestReceived.php 和 SendJobSeekerResume.php。 我正在尝试使用count() 在小铃铛图标旁边显示通知总数,然后显示与相应通知类相关的消息。消息很简单,它们位于 /layouts/partials/notification。

1。 interview_request_received.blade.php

<div>
    <span class="font-weight-bold">You've been sent an Interview request!</span>
</div>

2。 send_job_seeker_resume.blade.php

<div>
    <span class="font-weight-bold">You've been sent a new Job Profile!</span>
</div>

在我的管理文件中,我有 2 个角色,具体取决于用户是作为求职者还是雇主登录。 admin.blade.php:

<!-- Nav Item - Alerts -->
                    <li class="nav-item dropdown no-arrow mx-1">
                        <a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            Notifications<i class="fas fa-bell fa-fw"></i>

                            @if(Auth::user()->role_id === 1)
                                <!-- Counter - Alerts -->
                                <span class="badge badge-danger badge-counter">{{ $jobSeekerProfile->unreadNotifications->where('type', 'App\Notifications\InterviewRequestReceived')->count() > 0 ? $jobSeekerProfile->unreadNotifications->count() : '' }}</span>
                            @endif

                            @if(Auth::user()->role_id === 2)
                                <!-- Counter - Alerts -->
                                <span class="badge badge-danger badge-counter">{{ Auth::user()->unreadNotifications->where('type', 'App\Notifications\SendJobSeekerResume')->count() }}</span>
                            @endif
                        </a>
                        <!-- Dropdown - Alerts -->
                        <div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="alertsDropdown">
                            <h6 class="dropdown-header">
                                Notifications
                            </h6>

                            @if(Auth::user()->role_id === 1)
                                @foreach($jobSeekerProfile->unreadNotifications as $notification)
                                    <a class="dropdown-item d-flex align-items-center" href="#">
                                        @include('layouts.partials.notification.'. Str::snake(class_basename($notification->type)))
                                    </a>
                                @endforeach
                            @endif

                            @if(Auth::user()->role_id === 2)
                                @foreach(Auth::user()->unreadNotifications as $notification)
                                    <a class="dropdown-item d-flex align-items-center" href="#">
                                        @include('layouts.partials.notification.'. Str::snake(class_basename($notification->type)))
                                    </a>
                                @endforeach
                            @endif

                            <a class="dropdown-item text-center small text-gray-500" href="#">Show All Alerts</a>
                        </div>
                    </li>

role_id === 1 的两个项目都在工作,我得到了计数和带有消息的项目, 但是 role_id === 2 我得到计数​​ 0 并且没有带有消息的项目的项目,这很奇怪。当然,我正在查看和测试 2 个帐户,其中我将 role_id 设置为 1 或将 role_id 设置为 2。

这是我的通知表的屏幕截图: 当我使用 user_id 12(也将 role_id 设置为 2)登录时,它应该显示所有 notifiable_id 设置为 12 的通知。

我死掉了我的两个模型,看看通知是否在那里, 像这样的employerProfile 和jobSeekerProfile 模型,我可以看到我的employerProfile 模型中没有通知,它只是一个空数组。以下是截图。

dd($employerProfile->notifications);

dd($jobSeekerProfile->notifications);

EmployerProfile.php 模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;

class EmployerProfile extends Model
{
    use Notifiable;

    protected $fillable = [

        'user_id',
        'company_name',
        'company_phone',
        'immediate_contact',
        'email',
        'company_address',
        'number_of_employees'

    ];

    public function user(){

        return $this->belongsTo('App\User');

    }

}

JobSeekerProfile.php 模型:

<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;

class JobSeekerProfile extends Model
{
    use Notifiable;

    protected $fillable = [

        'user_id',
        'photo_id',
        'resume_id',
        'video_one_id',
        'video_two_id',
        'video_three_id',
        'first_name',
        'last_name',
        'email',
        'date_of_birth',
        'full_or_part_time',
        'experience',
        'additional_skills',
        'file'

    ];

    public function user(){

        return $this->belongsTo('App\User');

    }

    public function resume(){

        return $this->belongsTo('App\Resume');

    }

    public function video(){

        return $this->belongsTo('App\Video');

    }

}

谁能帮忙?

【问题讨论】:

    标签: php mysql laravel notifications


    【解决方案1】:

    您收到来自错误模型的通知。

    根据您的代码和数据库结构, 假设登录用户 id 是 3,employer_profile_user_id 是 12

    $user-&gt;unreadNotificationsnotifications 表中获取记录,其中notifiable_typeApp\Usernotifiable_id3

    $user-&gt;employerProfile-&gt;unreadNotificationsnotifications 表中获取记录,其中notifiable_typeApp\EmployerProfilenotifiable_id12

    所以试试这个计数

    @if(Auth::user()->role_id === 2)
          <!-- Counter - Alerts -->
          <span class="badge badge-danger badge-counter">{{ Auth::user()->employerProfile->unreadNotifications->where('type', 'App\Notifications\SendJobSeekerResume')->count() }}</span>
    @endif
    

    这里详细介绍

    @if(Auth::user()->role_id === 2)
           @foreach(Auth::user()->employerProfile->unreadNotifications as $notification)
           <a class="dropdown-item d-flex align-items-center" href="#">
                @include('layouts.partials.notification.'. Str::snake(class_basename($notification->type)))
                                        </a>
           @endforeach
    @endif
    

    【讨论】:

    • 在获取不同的 ID 时,我可能搞砸了。但我通过这样做使它工作:$employerProfile = EmployerProfile::all()-&gt;where('id', $user-&gt;id)-&gt;first(); 获取 id 列而不是这个:$employerProfile = EmployerProfile::all()-&gt;where('user_id', $user-&gt;id)-&gt;first(); 它正在获取 user_id 列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多