Laravel - Уведомления на электронную почту и базу данных - PullRequest
0 голосов
/ 27 февраля 2020

Используя Laravel -5.8 для моего проекта веб-приложения, у меня есть этот класс уведомлений:

namespace App\Notifications;

use http\Url;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class AppraisalGoalPublish extends Notification implements ShouldQueue
{
    use Queueable;

    public function __construct()
    {
    }

    public function via($notifiable)
    {
        return ['mail','database'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
    }

    public function toDatabase()
    {
        return [

        ];
    }   
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

и этот контроллер

public function publish_all_posts(){

    $userCompany = Auth::user()->company_id;
    $userEmployee = Auth::user()->employee_id;    
    $userId = Auth::user()->id;
    $userEmail = Auth::user()->id;
    $userCode = Auth::user()->employee_code;
    $userFirstName = Auth::user()->first_name;
    $userLastName = Auth::user()->last_name;

    $identities = DB::table('appraisal_identity')->select('id')->where('company_id', $userCompany)->where('is_current', 1)->first();
    $reviewperiod = DB::table('appraisal_identity')->select('appraisal_name')->where('company_id', $userCompany)->where('is_current', 1)->first();

    $linemanager = DB::table('hr_employees')->select('line_manager_id')->where('id', $userEmployee)->first();
    $linemanageremail = DB::table('hr_employees')->select('email')->where('line_manager_id', $linemanager)->pluck('email');
    $linemanagerid = DB::table('hr_employees')->select('id')->where('line_manager_id', $linemanager)->pluck('id');


    $unapproved_count = AppraisalGoal::where('employee_id', $userEmployee)->where('appraisal_identity_id', $identities->id)->where('is_published',0)->count();

    if ($unapproved_count > 3){
    $unapproved_post = AppraisalGoal::where('employee_id', $userEmployee)->where('appraisal_identity_id', $identities->id)->where('is_published',0)
            ->update([
                'is_published' => 1,
                'is_approved' => 1

                ]);

        Session::flash('success', 'Goals Published successfully');
        return redirect()->back();
    }else{
        Session::flash('info', 'You cannot proceed. Kindly Set all Goals before you publish!');
        return redirect()->back();
    } 
}

Я хочу отправить уведомление по электронной почте, а также сохранить в базе данных при отправке publish_all_posts()

  1. Я хочу отправить уведомление по электронной почте на $linemanageremail, что: Сотрудник с кодом $ userCode и именем $FirstName. ' ' . $LastName опубликовал свой / ее цели на период обзора $reviewperiod для вашего одобрения. Спасибо

  2. Сохраните содержимое почтового уведомления в таблице уведомлений: с $userId в качестве отправителя, $linemanagerid в качестве получателя, содержимое письма в качестве данных.

Как мне заполнить мой AppraisalGoalPubli sh и контроллер для достижения этих целей?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Вы можете сделать это в следующих шагах -

  1. Добавить следующие черты в вашу модель HrManager , Ref

Незначительные изменения в вашем контроллере:

public function publish_all_posts()
    {
        $userCompany = Auth::user()->company_id;
        $userEmployee = Auth::user()->employee_id;

        $identities = DB::table('appraisal_identity')->select('id')->where('company_id', $userCompany)->where('is_current', 1)->first();
        $reviewperiod = DB::table('appraisal_identity')->select('appraisal_name')->where('company_id', $userCompany)->where('is_current', 1)->first();

        $linemanager = HrManager::where('id', $userEmployee)->first();


        $unapproved_count = AppraisalGoal::where('employee_id', $userEmployee)->where('appraisal_identity_id', $identities->id)->where('is_published',0)->count();

        $linemanager->notify(new AppraisalGoalPublish(Auth::user(), $reviewperiod));

        if ($unapproved_count > 3){
            $unapproved_post = AppraisalGoal::where('employee_id', $userEmployee)->where('appraisal_identity_id', $identities->id)->where('is_published',0)
                ->update([
                    'is_published' => 1,
                    'is_approved' => 1

                ]);

            Session::flash('success', 'Goals Published successfully');
            return redirect()->back();
        }else{
            Session::flash('info', 'You cannot proceed. Kindly Set all Goals before you publish!');
            return redirect()->back();
        }
    }

А в вашем классе уведомлений -

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class AppraisalGoalPublish extends Notification implements ShouldQueue
{
    use Queueable;

    private $sender;
    private $reviewPeriod;
    private $name;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($sender, $reviewPeriod)
    {
        $this->sender = $sender;
        $this->reviewPeriod = $reviewPeriod;
        $this->name = $this->sender->first_name.' '.$this->sender->last_name;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail', 'database'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)->view(
            'your.view.path', ['name' => $this->name, 'reviewPeriod' => $this->reviewPeriod]
        );
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toDatabase($notifiable)
    {
        return [
            'sender' => $this->sender->id,
            'receiver' => $notifiable->id,
            'message' => 'The employee with the code $userCode and name ' . $this->name . ' has published his/her goals for the review Period '. $this->reviewPeriod .' for your approval. Thanks'
        ];
    }
}

Создайте представление (шаблон блейда), которое будет содержать стили электронной почты и все. Внутри этого блейда вы получите две переменные $ name и $ reviewPeriod. Если вы хотите режим, вы можете передать как в toMail метод.

0 голосов
/ 27 февраля 2020

В вашем действии контроллера publish_all_posts () перед перенаправлением пользователя добавьте следующую строку. Вы можете изменить массив в соответствии с вашими требованиями.

$details = [

    'full_name' => $FirstName. ' ' . $LastName
];

$user->notify(new \App\Notifications\AppraisalGoalPublish($details));

Также измените свой AppraisalGoalPubli sh () следующим образом.

public function toMail($notifiable)
{
         return (new MailMessage)
                    ->line($this->details['full_name']);

 }

 public function toDatabase($notifiable)
 {
        return [
           'data' => $this->details['full_name']
        ];
 }

Для получения более подробной информации смотрите do c - https://laravel.com/docs/5.8/notifications#mail-уведомлений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...