I have a website built with Laravel 5.8 and it has real time (socket ) chat on it. The problem is when I send a message from one client, another client got a notification unless you go to chat window. Once you read a message then it is not going to be updated anymore unless you make hard refresh of web page.
This issue happens when I use Redis, Socket.io, Laravel-echo Server. But everything works great when I change it to Pusher as a broadcast provider.
My chatcontroller.php is like below :
<?php
namespace App\Http\Controllers;
use App\Http\Resources\Chat as ChatResource;
use App\Http\Resources\MarketplaceTrade as MarketplaceTradeResource;
use App\Models\Chat;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ChatController extends Controller
{
/**
* Get chat resource
*
* @param Chat $chat
* @return ChatResource
*/
public function get(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403, trans('chat.access_forbidden'));
}
$chat->load([
'participants' => function ($query) {
$query->where('user_id', '!=', Auth::user()->id);
},
'participants.user'
]);
return new ChatResource($chat);
}
/**
* Update user's participation.
*
* @param Chat $chat
*/
public function updateParticipation(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403, trans('chat.access_forbidden'));
} else {
$chat->updateParticipation(Auth::user());
}
}
/**
* @param Chat $chat
* @return MarketplaceTradeResource
*/
public function latestMarketplaceTrade(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403, trans('chat.access_forbidden'));
}
$trade = $chat->marketplaceTrades()
->latest()->with('buyer', 'seller')
->first();
return new MarketplaceTradeResource($trade);
}
/**
* Get status of chat for authenticated user
*
* @param Chat $chat
* @return array
*/
public function participation(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403, trans('chat.access_forbidden'));
}
return $chat->getParticipation(Auth::user());
}
/**
* Return paginated result of authenticated chat
*
* @param Request $request
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function table(Request $request)
{
$chats = Auth::user()
->participatingChats()->latest('updated_at')
->with([
'participants' => function ($query) {
$query->where('user_id', '!=', Auth::user()->id);
},
'participants.user'
]);
$filters = $request->get('filters', []);
if (array_has($filters, 'user') && $filters['user']) {
$chats->whereHas('participants.user', function ($query) use ($filters) {
$query->where('id', '!=', Auth::user()->id);
$query->where('name', 'like', "%{$filters['user']}%");
});
}
$results = paginateResult(
$chats,
$request->get('itemPerPage', 10),
$request->get('page', 1)
);
return ChatResource::collection($results);
}
}
I have found that second client which should get a notification gets a notification normally when I remove this part :
->with([
'participants' => function ($query) {
$query->where('user_id', '!=', Auth::user()->id);
},
'participants.user'
]);
is there a way to make it work without deleting this part? Because when I remove this part chat page not working although chat notifications work properly.
from Newest questions tagged laravel-5 - Stack Overflow https://ift.tt/2YrCXTm
via IFTTT
Display And Hide Menus With JavaScript And CSS
RépondreSupprimerNodeJS Simple way to send SMTP mail
PHP Pagination
PHP Date and Timestamp Formats
Getting IP address and type in Node js
R Plot Types
Php file based authentication
PHP user registration & login/ logout