Отправить событие laravel конкретному пользователю

Я хочу отправлять уведомления конкретному пользователю по пушеру. I've installed everything needed already

логика

  1. Пользователь может создать проект
  2. Пользователь может сделать ставку на проекты
  3. Проект получить user_id (владелец)
  4. Тендерный стол получает project_id
  5. Ставка получает user_id (участник торгов)

То, что я хочу, это

Когда пользователь bid on a project, project owner получает уведомление об этом действии с помощью pusher.

Что я сделал до сих пор:

  1. Создание события
  2. Вызов этого события после сохранения ставки
  3. созданный 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&nbsp;&nbsp;&nbsp;&nbsp;</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"
      }
    }
  }
}

Любая идея?

0 ответов

Другие вопросы по тегам