Laravel - Попытка получить свойство 'email' не-объекта при попытке отправить уведомление - PullRequest
0 голосов
/ 24 апреля 2020

В моем Laravel -5.8 я хочу отправить уведомление по электронной почте конкретному hod:

public function show($id)
{
    if (! Gate::allows('leave_request_review')) {
        return abort(401);
    }

    $userCompany = Auth::user()->company_id;
    $userEmployee = Auth::user()->employee_id;    

    $leaverequest = HrLeaveRequest::findOrFail($id);
    $departmentId               = $leaverequest->department_id;
    $hodId                      = DB::table('hr_departments')->select('dept_head')->where('id', $departmentId)->first()->dept_head;
    $hodEmail                   = DB::table('hr_employees')->select('email')->where('id', $hodId)->where('company_id', $userCompany)->first()->email; 
    die(var_dump($departmentId));

    $hoddetails = [
        'subject' => 'Leave for : '.$employeeFirstName,
        'greeting' => 'Dear '.$hodFirstName . ' '. $hodFirstName . ',',
        'body' =>  'Please note that you have a Leave request awaiting your approval (' . $employeeFirstName . ' ' .$employeeLastName. ') ',
        'line1' => 'Please note that you have a Leave request awaiting your approval (' . $employeeFirstName . ' ' .$employeeFirstName. ') ',
        'thanks' => 'Thank you!',            
        'hod_email' => $hodEmail,
        'hod_id' => $hodId,
        'notification_type' => 'HOD Leave Approval',           
    ];

    Notification::route('mail', $hoddetails['hod_email'])
        ->notify(new \App\Notifications\Leave\LineManagerToHod($hodetails));

    return View::make('hr.employee_leaves.show')
        ->with('leaverequest', $leaverequest);
}

Затем я получил эту ошибку:

Попытка получить свойство 'email' не-объекта

Когда я

dd($hodId);

в

$hodId = DB::table('hr_departments')->select('dept_head')->where('id', $departmentId)->first()->dept_head;

, я обнаружил, что dept_name равно нулю, и это делает $hodEmail быть нулевым, так что это вызывает ошибку.

Как мне решить эту проблему? Или даже прекратить действие или показать сообщение вместо ошибки?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете просто проверить, существует ли $hodEmail существующая операция, например,

$hodEmail = DB::table('hr_employees')->select('email')->where('id', $hodId)->where('company_id', $userCompany)->first();
if($hodEmail){
      $hodEmail=$hodEmail->email;
}else{
      $hodEmail="somedefault@email.com";

}

Также вы можете просто использовать каскадное отображение, например

$hodEmail = DB::table('hr_employees')->select('email')->where('id', $hodId)->where('company_id', $userCompany)->first()->email??"somedefault@email.com";
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...