2017-10-25 6 views
3

나는 내가 여기에 정말 간단 뭔가를 그리워 생각하지만,이 같은 스크립트가 :Laravel 5.5 메일

\Mail::to(User::all()) 
      ->send(new NotificationEmail($notification)); 

class NotificationEmail extends Mailable { 
    use Queueable, SerializesModels; 

    /** 
    * Create a new message instance. 
    * 
    * @param Notification $notification 
    * 
    */ 
    public function __construct(Notification $notification) { 
     $this->notification = $notification; 
    } 

    /** 
    * Build the message. 
    * 
    * @return $this 
    */ 
    public function build() { 
     $notification = $this->notification; 

     return $this 
      ->from([ 
       'address' => \env('MAIL_DEFAULT_SENDER'), 
       'name' => \env('APP_NAME') 
      ]) 
      ->view('email.notification.ready'); 
    } 
} 

가 지금은

같은 것을 시작하는 이메일 메시지를 싶습니다을

{사용자의 첫 번째 이름} 하지만 그 이메일을받을 사용자의 이름을 얻는 방법을 모르겠습니다. 그걸 알아낼 방법이 있을까요?

+0

확인 문서 (https://laravel.com/ docs/5.5/mail # view-data) – ljubadr

+0

있습니다. 'User :: all();'을 메일에 전달했기 때문에 단순히 그것을 'NotificationEmail' 클래스의 매개 변수로 추가 할 수는 없습니다. 못생긴 루프를 쓰지 않고 어떻게이 문제를 해결할 수 있는지 설명해 주시겠습니까? – SheperdOfFire

+0

그건 좋은 질문입니다. 잘 모르겠다. – ljubadr

답변

0

이메일이 그들이받는 모든받는 사람을 볼 수 있습니다받는 사람들 때문에이 모든 사용자에게 이메일을 보낼 수있는 권장 방법이 아니다 당신이 사용자의 이름을 추가하는 사용자 정의 할 수 없습니다 같은 메시지 .

Mailable을 각 사용자에게 만들고 Mailable을 모두 대기시켜야합니다. 모든 사용자에게 전자 메일을 개별적으로 보내는 작업은 시간이 많이 걸리는 작업이므로 직원은 백그라운드에서 대기열을 처리해야합니다.

$users = User::all(); 
foreach ($users as $user) { 
    Mail::to($user)->queue(new NotificationEmail($notification, $user)); 
} 

그리고 지금 당신은 $user 인스턴스를 전달 할 수 있으며, 사용자의 이름이보기로 볼 수 있습니다 : [데이터보기]에 대한

public function __construct(Notification $notification , User $user) { 
    $this->notification = $notification; 
    $this->user = $user; 
} 

public function build() { 
    $notification = $this->notification; 

    return $this 
     ->from([ 
      'address' => \env('MAIL_DEFAULT_SENDER'), 
      'name' => \env('APP_NAME') 
     ]) 
     ->view('email.notification.ready' , [ 
      'user' => $this->user 
     ]); 
}