Как я могу отправить уведомление в Laravel пользователю, который в данный момент не вошел в систему?

Я создаю приложение типа "Поиск работы". Есть два типа пользователей: соискатели и работодатели, каждый из которых имеет свою роль. Когда работодатель входит в систему, он может просматривать профили кандидатов и запрашивать собеседование. Он может выбрать 2 варианта времени и даты и нажать «Отправить». Когда этот конкретный Пользователь входит в систему, в верхней части страницы я хочу отображать уведомления со значком колокольчика, и в уведомлении должно быть сказано: «Вам отправили запрос на интервью!». Затем, когда они нажмут на него или перейдут в раздел уведомлений на панели администратора, отобразится информация о работодателях: «Здравствуйте, имя пользователя, компания ABC заинтересована в вашем профиле и хотела бы назначить вам собеседование». с двумя вариантами даты и времени. Соискатель выбирает дату и время вариант 1, нажимает кнопку «Отправить», после чего работодатель получает уведомление от соискателя работы. Они будут общаться таким образом, пока оба не согласятся о дате и времени для организации собеседования. Так что я бы хотел 2 уведомления об этом. 1, когда запрос на собеседование отправляется кандидату, и второй, когда кандидат выбирает подходящую для него дату и время и отправляет запрос обратно работодателю. Я понимаю, как отправить уведомление, когда пользователь вошел в систему, но мне не хватает того, как отправить уведомление пользователю, который не вошел в систему. Оба этих типа пользователей хранятся в моей таблице пользователей только с разными ролями.

Файл job_seeker_profile.blade.php:

{!! Form::open(['method'=>'POST', 'action'=>'AdminEmployerInterviewRequestsController@store', 'files'=>true, 'style'=>'width: 100%;']) !!}

<div class="form-group">
    <div class="input-group date" id="datetimepicker1" data-target-input="nearest">
        {!! Form::text('date_time1', null, ['class'=> $errors->first('date_time1') ? 'border-danger form-control datetimepicker-input' : 'form-control datetimepicker-input', 'data-target'=>'#datetimepicker1']) !!}
        <div class="input-group-append" data-target="#datetimepicker1" data-toggle="datetimepicker">
            <div class="input-group-text"><i class="fa fa-calendar"></i></div>
        </div><br>
    </div>
    <small class="text-danger">{{ $errors->first('date_time1') }}</small>
</div>
<div class="col">

</div>

<div class="form-group">
    <div class="input-group date" id="datetimepicker2" data-target-input="nearest">
        {!! Form::text('date_time2', null, ['class'=> $errors->first('date_time2') ? 'border-danger form-control datetimepicker-input' : 'form-control datetimepicker-input', 'data-target'=>'#datetimepicker2']) !!}
        <div class="input-group-append" data-target="#datetimepicker2" data-toggle="datetimepicker">
            <div class="input-group-text"><i class="fa fa-calendar"></i></div>
        </div><br>
    </div>
    <small class="text-danger">{{ $errors->first('date_time2') }}</small>
</div>

<div class="form-group">
    {!! Form::hidden('user_id', Auth::user()->id, ['class'=>'form-control']) !!}
</div>

<div class="form-group">
    {!! Form::hidden('job_seeker_profile_user_id', $jobSeekerProfile->id, ['class'=>'form-control']) !!}
</div>

<div class="form-group">
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
    {!! Form::submit('Send Interview Request', ['class'=>'btn btn-primary float-right']) !!}
</div>
<br><br><br><br>

{!! Form::close() !!}

Файл AdminEmployerInterviewRequestsController.php:

public function store(EmployerInterviewCreateRequest $request)
{
    $input = $request->all();

    $user = Auth::user();

    $JobSeekerProfile = JobSeekerProfile::all();

    $user->interviewRequestsSent()->create($input);
    $user->interviewRequestsReceived()->create($input);

    $user->notify(new InterviewRequestSent());

    $JobSeekerProfile->notify(new InterviewRequestReceived());

    return redirect('/admin/employer/interviews');

}

но когда я позвонил

$JobSeekerProfile->notify(new InterviewRequestReceived());

Это дало мне эту ошибку:

Method Illuminate\Database\Eloquent\Collection::notify does not exist.

Можно ли отправить другому пользователю уведомление после выполнения действия?


person Ryan Sacks    schedule 11.03.2020    source источник
comment
notify not found on this или что-то не очень полезное ... Можете ли вы предоставить код, вызвавший ошибку, и фактическое сообщение об ошибке?   -  person miken32    schedule 11.03.2020
comment
Измените свой вопрос, включив в него эту информацию.   -  person miken32    schedule 11.03.2020
comment
Я его отредактировал. Посмотрите сейчас на мой контроллер и на появившееся у меня сообщение об ошибке.   -  person Ryan Sacks    schedule 11.03.2020


Ответы (2)


Ваша ошибка заключается в том, что вы втягиваете каждый JobSeekerProfile в коллекцию, а затем пытаетесь вызвать notify() в коллекции. Поскольку вы отправляете идентификатор, просто используйте его для создания экземпляра и уведомления его.

public function store(EmployerInterviewCreateRequest $request)
{
    $input = $request->all();

    $user = Auth::user();

    $JobSeekerProfile = JobSeekerProfile::find($request->job_seeker_profile_user_id);

    $user->interviewRequestsSent()->create($input);
    $user->interviewRequestsReceived()->create($input);

    $user->notify(new InterviewRequestSent());

    $JobSeekerProfile->notify(new InterviewRequestReceived());

    return redirect('/admin/employer/interviews');

}
person miken32    schedule 11.03.2020

Сейчас это невозможно. Уведомление могут получать только пользователи, которые вошли в систему. Я отправил несколько билетов по этому поводу

person Sidney De Vries    schedule 11.03.2020
comment
Есть идеи другого способа достичь того, что я ищу? - person Ryan Sacks; 11.03.2020