Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Версия 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 [
//
];
}
}
Не в сети
Во первых, код из файлов можно было подчистить, чтобы пустые функции не светились. Места меньше - читать проще.
Во вторых, проверял ли, что выводится из Auth::user() ? Есть ли там значение unreadNotifications. Попробуй \Auth::user(). По моему ещё есть конструкция \Auth::user()->find($user_id)
Не в сети
Страницы 1