Отправить событие laravel конкретному пользователю
Я хочу отправлять уведомления конкретному пользователю по пушеру. I've installed everything needed already
логика
- Пользователь может создать проект
- Пользователь может сделать ставку на проекты
- Проект получить
user_id
(владелец) - Тендерный стол получает
project_id
- Ставка получает
user_id
(участник торгов)
То, что я хочу, это
Когда пользователь
bid on a project
,project owner
получает уведомление об этом действии с помощью pusher.
Что я сделал до сих пор:
- Создание события
- Вызов этого события после сохранения ставки
- созданный
Echo.channel
в моемapp.js
для тестирования
То, что мне нужно, чтобы вы помогли мне это
Для завершения моей функции события и фактического получения данных в браузере для конкретного пользователя
the project owner
Код
event
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use App\User;
use App\Bid;
class BidPlaced implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public $bid;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user, Bid $bid)
{
$this->user = $user;
$this->bid = $bid;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return ['bidplaced.'.$this->bid->project_id];
}
}
controller
public function sendbid(Request $request)
{
//validator
$bid = new Bid;
//input data
$bid->save();
//send the notification to project owner
broadcast(new BidPlaced($bid))->toOthers();
Session::flash('sucess', 'Your Bid placed successfully.');
return redirect()->back();
}
User Model
public function projects()
{
return $this->hasMany(Project::class);
}
public function bids()
{
return $this->hasMany(Bid::class);
}
Project Model
public function User()
{
return $this->belongsTo(User::class);
}
public function bids()
{
return $this->hasMany(Bid::class);
}
Bid Model
public function user()
{
return $this->belongsTo(User::class);
}
public function project()
{
return $this->belongsTo(Project::class);
}
Вопрос
Что я должен сделать, чтобы отправить это уведомление владельцу проекта, поскольку у него / нее есть новая заявка на его / ее проект?
Обновить
Я внес некоторые изменения, пока что получаю данные в pusher, но в моем приложении ничего не получено (не могу получить уведомления)
код
blade
добавлен идентификатор пользователя авторизации.
<notifications user_id="{{ auth()->user()->id }}"></notifications>
broadcast routes
Broadcast::channel('bidplaced.{UserId}', function ($user, $UserId) {
return (int) $user->id === (int) $UserId;
});
Event
получение идентификатора владельца проекта в качестве второго параметра (то, что я назвал $UserId
в маршрутах`
return new PrivateChannel('bidplaced.'.$this->bid->project->user->id);
Vue Component
Здесь я добавил +this.user_id
который получает идентификатор пользователя Auth из blade-сервера which should be the same as my event return changes
Echo.private('bidplaced.'+this.user_id)
.listen('BidPlaced', (e) => {
this.bids.push(e.bid);
});
Results
это то, что я получаю в толчке как результат (но не могу получить это на мой взгляд)
{
"bid": {
"id": 240,
"user_id": 2, // worker id
"project_id": 31,
"bid": 6666666,
"message": "yhyhyhyhyhyhyhyhyhyhyhyhyhyh",
"attachment": null,
"accepted": "n",
"created_at": "2018-08-06 01:06:33",
"updated_at": "2018-08-06 01:06:33",
"project": {
"id": 31,
"user_id": 1, // id of the owner
"title": "number 31",
"slug": "number-31",
"body": "<p>frgkljelighojte </p>",
"attachment": null,
"projectclass": "fgheth",
"budget": 45346,
"deadline": "2018-08-23",
"published": "n",
"runing": "n",
"payment_verified": "n",
"created_at": "2018-08-04 17:27:47",
"updated_at": "2018-08-04 17:27:47",
"user": { //the owner info
"id": 1,
"name": "admin",
"email": "admin@admin.com",
"created_at": "2018-08-02 10:57:47",
"updated_at": "2018-08-02 10:57:47"
}
}
}
}
Любая идея?