Я выполнил каждую установку, связанную с Laravel Websocket. Вот что я пытаюсь сделать: у меня есть таблица в базе данных, где я храню свои заказы. Когда поступает новый заказ, я хочу распечатать его на консоли на колонке моей домашней страницы.
Буду рад, если вы поможете. Спасибо.
Вы можете использовать событие модели, как показано ниже, в вашей модели заказа.
protected static function booted()
{
//everytime when new order is created this function will be called
static::created(function ($order) {
//then broadcast event
NewOrder::dispatch($order);
});
}
Затем вам нужно определить канал в вашем route/channel.php
use App\Models\Order;
Broadcast::channel('newOrder', function ($user) {
return $user->id;
});
Тогда создайте событие php artisan make:event NewOrder
class NewOrder implements ShouldBroadcast
{
/**
* The user that created the server.
*
* @var \App\Models\User
*/
public $user;
/**
* Create a new event instance.
*
* @param \App\Models\User $user
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('newOrder');
}
}
затем прослушайте событие NewOrder в канале newOrder
Echo.channel(`newOrder`)
.listen('NewOrder', (e) => {
console.info(e.order);
});
Читать документацию подробнее https://laravel.com/docs/9.x/broadcasting#pusher-каналы
Где ты застрял? Прочитайте laravel.com/docs/9.x/broadcasting и, возможно, laravel.com/docs/9.x/eloquent#events, чтобы сделать это при создании новой модели заказа.