Я уже настроил подключение к веб-сокету с помощью pusher. Я могу запускать события в администраторе веб-сокета и показывать его вывод через console.log
. Теперь я создал новое событие: если пользователь добавляет новый продукт, таблица будет обновляться всякий раз, когда кто-то ее просматривает. Но, похоже, я могу успешно добавить данные, но таблица не будет обновляться для другого пользователя. Может кто-нибудь знает, почему мое мероприятие не работает?
ProductsEvent. php
namespace App\Events;
//show only important imports
use Illuminate\Broadcasting\Channel;
use App\Product; //Import my model
class ProductsEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $product;
public function __construct(Product $product)
{
$this->product = $product;
}
public function broadcastOn()
{
return new Channel('Products');
}
}
ProductsControlller (store)
public function store(Request $request)
{
$product = new Product;
//some validation...
//broadcast(new ProductsEvent($product)); if i put it here i got No query results for model [App\Product].
$product->barcode = $request->barcode;
$product->product_name = $request->product_name;
$product->price = $request->price;
$product->quantity = 0;
$product->category = $request->category;
$product->supplier_id = $request->supplier;
$product->save();
broadcast(new ProductsEvent($product));
}
каналов. php
Broadcast::channel('Products',function(){
return true;
});
и мой vue component
created(){
//when i successfully created the data,
i will call getProducts to listen in the channel for DOM updates
Echo.join('Products')
.listen('ProductsEvent',(event)=>{
this.getProducts()
})
}
Если я вызываю broadcast
перед save
в своем контроллере, я получаю что-то вроде этого No query results for model [App\Product].
Я убрал строку App\Providers\BroadcastServiceProvider::class,
в config. php для работы трансляции.