Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 04.09.2019 13:59:54

Проблемы с уведомлениями.

Версия Laravel: 5.7.28
Версия PHP: 7.1.3

Задача, что должно происходить _в целом_, техническое задание:
Необходимо сделать уведомления для администратора сайта. Суть вот в чем, пользователь оставляет заявку на сайте и в админ панели должно высвечиваться уведомление, что пользователь оставил заявку. При создании заявки в ЛК пользователя -> создается соответствующая запись в базе данных -> создается запись в таблице notifications.
Чего вы ожидали получить:
В админ панели мне необходимо вывести количество непрочитанных уведомлений, в этом моя проблема.
Данный код прописываю во view
Такая запись - {{ count(auth()->user()->unreadNotifications) }} выводит всегда ноль.
Эта запись тоже выводит ноль {{ count(Auth::user()->unreadNotifications) }}
С такой записью {{ count(\App\User::find(1)->unreadNotifications) }} выводит количество непрочитанных уведомлений только от пользователя с id = 1
PHPStrom выдается ошибку "Field 'unreadNotifications' not found in Illuminate\Contracts\Auth\Authenticatable|null"

Код:
<div class="list-group-item list-group-item-action dropdown show">
                <a class=" dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    Новые заказы <span class="badge badge-primary badge-pill">{{ auth()->user()->unreadNotifications }}</span>
                </a>

                <ul class="dropdown-menu" aria-labelledby="dropdownMenuLink">
                    <li>
                        @foreach(auth()->user()->unreadNotifications() as $notification)

                            <a href="#" onclick="{{ $notification->markAsRead() }}">Новая заявка <br> <small>{{ $notification->created_at->diffForHumans() }}</small> </a>
                        @endforeach
                    </li>
                </ul>
            </div>

Routes для админ панели

Route::middleware('auth')->prefix('admin')->name('admin.')->group(function () {
    Route::resource('services', 'ServiceController');
    Route::resource('cars', 'CarController');
    Route::resource('workers', 'WorkerController');
    Route::resource('orders', 'OrderController');
    Route::resource('clients', 'ClientController');
    Route::resource('roles', 'RoleController');
    Route::resource('reviews', 'ReviewController');
    Route::resource('users', 'UserController');
    Route::resource('admin', 'AdminController');
    Route::resource('notification', 'UserController');
});

app\Http\Controllers\Order_from_userController.php -> тут создается запись в БД в таблицу с заявкой и в таблицу notifications

<?php

namespace App\Http\Controllers;

use App\Notifications\RepliedToThread;
use App\Order_from_user;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Notifications\Notifiable;

class Order_from_userController extends Controller
{
    use Notifiable;
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'id_client' => 'required',
            'services' => 'required'
        ]);

        Order_from_user::create($request->all());

        Auth::user()->notify(new RepliedToThread());

        return redirect()->route('cabinet.cabinet.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

app\Models\User.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

app\Models\Order_from_user.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order_from_user extends Model
{
    protected $fillable = ['id_client', 'services'];
}

app\Notifications\RepliedToThread.php

<?php

namespace App\Notifications;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class RepliedToThread extends Notification
{
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['database'];
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toDatabase($notifiable)
    {
        return [
            'repliedTime' => Carbon::now()
        ];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('The introduction to the notification.')
                    ->action('Notification Action', url('/'))
                    ->line('Thank you for using our application!');
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

Не в сети

#2 11.10.2019 13:08:24

Re: Проблемы с уведомлениями.

Во первых, код из файлов можно было подчистить, чтобы пустые функции не светились. Места меньше - читать проще.
Во вторых, проверял ли, что выводится из Auth::user() ? Есть ли там значение unreadNotifications. Попробуй \Auth::user(). По моему ещё есть конструкция \Auth::user()->find($user_id)

Не в сети

Подвал раздела