Аргумент 3, переданный в App \ Events \ NoticeAnnouncement :: __ construct (), должен быть экземпляром App \ User

Я пытаюсь разослать всем ученикам почту, когда учитель отправит уведомление. Для этого я вызываю событие, когда создается уведомление, и передаю уведомление, учителя и пользователя через переменную события. Но он дает ошибку, говоря, что аргумент 3, переданный в App \ Events \ NoticeAnnouncement :: __ construct (), должен быть экземпляром App \ User, экземпляром данного экземпляра Illuminate \ Database \ Eloquent \ Collection, вызываемым в C: \ xampp \ htdocs \ iiucsmartclassroom \ app \ Http \ Controllers \ Teacher \ NoticeController.php.

Вот мой контроллер уведомлений:

 public function submitNotice(Request $request){
    $validatedData = $request->validate([
    'notice_title' => 'required|max:255',
    'notice_description' => 'required|max:3000',
    'notice_file.*' => 'mimes:jpg,jpeg,pdf',
    ]);

    $data=array();
    $data['teacher_id']=$request->teacher_id;
    $data['notice_title']=$request->notice_title;
    $data['notice_description']=$request->notice_description;
    $data['notice_post_date']=$request->notice_post_date;
    $data['notice_post_time']=$request->notice_post_time;
    $image=$request->file('notice_file');

    if ($image) {
        $image_name= str::random(5);
        $ext=strtolower($image->getClientOriginalExtension());
        $image_full_name=$image_name.'.'.$ext;
        $upload_path='notices/';
        $image_url=$upload_path.$image_full_name;
        $success=$image->move($upload_path,$image_full_name);
        if ($success) {
            $data['notice_file']=$image_url;
            $notices = DB::table('notices')
                     ->insertGetId($data);

             $notice = Notice::find($notices);
             $teacher = Teacher::find($notice->teacher_id);
             $users = User::all();

             event(new NoticeAnnouncement($notice,$teacher,$users));
          if ($notices) {
             $notification=array(
             'message'=>'Notice Posted Successfully',
             'alert-type'=>'success'
              );
            return Redirect()->back()->with($notification);                      
         }else{
          $notification=array(
             'message'=>'Could not be able to post the Notice',
             'alert-type'=>'error'
              );
             return Redirect()->back()->with($notification);
         }      
            
        }else{

          return Redirect()->back();
            
        }
    }else{
          $notice = DB::table('notices')
                     ->insert($data);
          if ($notice) {
             $notification=array(
             'message'=>'Notice Posted Successfully',
             'alert-type'=>'success'
              );
            return Redirect()->back()->with($notification);                     
         }else{
          $notification=array(
             'message'=>'Could not be able to post the Notice',
             'alert-type'=>'error'
              );
             return Redirect()->back()->with($notification);
         }  
    }
}

Вот мое событие:

public $notice,$teacher,$user;
/**
 * Create a new event instance.
 *
 * @return void
 */
public function __construct(Notice $notice,Teacher $teacher,User $user)
{
    $this->notice = $notice;
    $this->teacher = $teacher; 
    $this->user = $user;
}

Вот мой слушатель:

public function handle(NoticeAnnouncement $event)
{
        foreach ($event->user as $user) {
        Mail::to($user->email)->send(new SendNotice($event->notice,$event->teacher,$event->user));
    }
}

person MrDev Laravel    schedule 12.02.2021    source источник
comment
Ваш метод ожидает пользователя. Вы вызываете это с группой пользователей.   -  person brombeer    schedule 12.02.2021
comment
мне нужно разослать почту всем пользователям, для которых я должен вызвать коллекцию пользователей. Есть ли способ исправить это?   -  person MrDev Laravel    schedule 12.02.2021


Ответы (2)


Вы отправляете в метод коллекцию пользователей вместо модели пользователя:

Mail::to($user->email)->send(new SendNotice($event->notice,$event->teacher,$user));
person Gert B.    schedule 12.02.2021
comment
Все еще не работает - person MrDev Laravel; 12.02.2021
comment
Та же ошибка? Модели в коллекции $ event- ›user относятся к типу App \ User? - person Gert B.; 12.02.2021
comment
да, та же ошибка. и да тип App \ User. - person MrDev Laravel; 12.02.2021
comment
Я бы проверил это, сбросив $ user. Если $ user имеет тип App \ User, он не выдаст эту ошибку из этой строки кода ... - person Gert B.; 12.02.2021

Вы используете функцию find($key), чтобы получить Illuminate\Database\Eloquent\Model из \Illuminate\Database\Eloquent\Collection.

public function handle(NoticeAnnouncement $event)
{
        foreach ($event->users as $key => $user) {
        Mail::to($user->email)->send(new SendNotice($event->notice,$event->teacher,$event->users->find($key)));
    }
}
person Thân LƯƠNG    schedule 13.02.2021