Laravel: почему отправка почты всем модулям? - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь отправить письмо пользователю, чтобы он использовал предоставленный модуль. На самом деле почта отправляется пользователю, но отправляет все модули. Я хочу, чтобы письмо отправлялось путем передачи module_id и last_used_module из AutoEmailTemplate пользователю specfi c. Как это сделать. Могу ли я кто-нибудь помочь с этим. Я новый laravel.

public function create() 
    {
        $users = User::where('user_type', 2)->get();
        $auto_email_templates=AutoEmailTemplate::all();
        $ModuleAutoMail=module_auto_mail::all();

        foreach($auto_email_templates as $mail) {
        foreach ($users as $user) {

               // foreach($ModuleAutoMail as $mod) {

                $email_id = $mail->id;
                $user_id = $user->id;
                $module_name = $mail->module_name;


                if (!EmailSave::where('user_id',$user_id)->where('email_id',$email_id)->whereDate('created_at', Carbon::today())->exists()) {
                    if($mail->condition_id=='1'){ 

                            if(is_null($user->last_sign_in)){

                                $ableToSendMail = true;
                            // break;
                            if ((EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1)) {
                                $ableToSendMail = true;
                            }

                            if ($ableToSendMail) { //saving and sent email

                                $mails = new EmailSave;
                                $mails->user_id = $user->id;
                                $mails->email_id =$mail->id;
                                Mail::to($user->email)->send(new Automail($mail));
                                $mails->save();
                            }
                       }
                    }
                    elseif ($mail->condition_id=='2'){

                        $last_sign_in = Carbon::parse($user->last_sign_in);
                        $DeferenceInDays = Carbon::parse(Carbon::now())->diffInDays($last_sign_in);

                        if($DeferenceInDays > 7){
                            $ableToSendMail = true;


                            if ((EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1)){  

                                $ableToSendMail = true;

                            }    
                            if ($ableToSendMail) {
                                $mails = new EmailSave;
                                $mails->user_id = $user->id;
                                $mails->email_id =$mail->id;
                                Mail::to($user->email)->send(new Automail($mail));
                                $mails->save();
                            }
                        }
                    }
                    else { 
                        foreach($ModuleAutoMail as $module) {
                            $module_id=$module->module_id;

                            if($mail->condition_id=='3' ){   

                                $last_used_module = Carbon::parse($module->last_used_module);
                                $DeferenceInDays = Carbon::parse(Carbon::now())->diffInDays($last_used_module);

                                AutoEmailTemplate::whereNotNull('module_name')->get(); 
                                module_auto_mail::where('module_id')->get();

                                if($module_name == $module_id){

                                    if(is_null($module->last_used_module)){ 

                                        $ableToSendMail = false;

                                    }

                                    elseif ($DeferenceInDays > 7) {
                                        $ableToSendMail = false;
                                    }
                                    else {
                                        if ((EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1)){  

                                            $ableToSendMail = false;
                                        }
                                    }

                                        if ($ableToSendMail) {

                                            $mails = new EmailSave;
                                            $mails->user_id = $user->id;
                                            $mails->email_id =$mail->id;
                                            Mail::to($user->email)->send(new Automail($mail));
                                            $mails->save();
                                        }
                                   }     
                                }
                            } 
                        }          
                    }
                }
            }
        }

1 Ответ

1 голос
/ 25 февраля 2020

попробуйте это, я изменил взгляд внимательно

public function create() 
    {
        $users = User::where('user_type', 2)->get();
        $auto_email_templates = AutoEmailTemplate::all();
        $ModuleAutoMail=module_auto_mail::all();

        foreach($auto_email_templates as $mail) {
            foreach ($users as $user) {

                    $ableToSendMail  = false;
                    $email_id = $mail->id;
                    $user_id = $user->id;
                    $module_name = $mail->module_name;
                    $emailCheck = EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count();

                    if (!EmailSave::where('user_id',$user_id)->where('email_id',$email_id)->whereDate('created_at', Carbon::today())->exists()) {

                        if($mail->condition_id=='1'){ 

                            if(is_null($user->last_sign_in)){

                                $ableToSendMail = true;

                                //this condition no need here - hamelraj
                                if ($emailCheck < 1) {
                                    $ableToSendMail = true;
                                }
                            }
                        }
                        elseif ($mail->condition_id=='2'){

                            $last_sign_in = Carbon::parse($user->last_sign_in);
                            $DeferenceInDays = Carbon::parse(Carbon::now())->diffInDays($last_sign_in);

                            if($DeferenceInDays > 7){
                                $ableToSendMail = true;

                                //this condition no need here - or you have to merge above if like  if($DeferenceInDays > 7 && $emailCheck < 1)
                                if ($emailCheck < 1){  
                                    $ableToSendMail = true;
                                } 
                            }
                        }
                        else { 
                            foreach($ModuleAutoMail as $module) {
                                $module_id=$module->module_id;

                                if($mail->condition_id=='3' ){   

                                    $last_used_module = Carbon::parse($module->last_used_module);
                                    $DeferenceInDays = Carbon::parse(Carbon::now())->diffInDays($last_used_module);

                                    //why this ??
                                    //AutoEmailTemplate::whereNotNull('module_name')->get(); 
                                    //module_auto_mail::where('module_id')->get();

                                    if($module_name == $module_id){

                                        if(is_null($module->last_used_module)){ 
                                            $ableToSendMail = false;
                                        }
                                        elseif ($DeferenceInDays > 7) {
                                            $ableToSendMail = false;
                                        }
                                        else {
                                            if ($emailCheck< 1){  
                                                $ableToSendMail = false;
                                            }
                                        }
                                    }     
                                    }
                                } 
                            }          
                        }

                        if ($ableToSendMail) { //saving and sent email

                            $mails = new EmailSave;
                            $mails->user_id = $user->id;
                            $mails->email_id =$mail->id;
                            Mail::to($user->email)->send(new Automail($mail));
                            $mails->save();
                        }
                    }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...