Developer Snippet Diary

Email alerts subscription laravel 10

This will cover
1. Get email from user
2. save them to database
3. Able to edit in admin panel

1. Create Table email_alerts_vehicles_data_table

DROP TABLE IF EXISTS `email_alerts`;
CREATE TABLE `email_alerts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) unsigned DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `alert_status` varchar(255) DEFAULT NULL COMMENT '1,0 for sending emails to only that are 1 ',
  `alert_keyword` varchar(255) DEFAULT NULL,
  `zip_city_state` varchar(255) DEFAULT NULL,
  `alert_nature` varchar(255) DEFAULT NULL COMMENT 'daily, weekly, monthly',
  `created_at` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp(),
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. Create A input form to show on front end 

<div class="email_subs mt-3">
    @if(session('success'))
        <div class="alert alert-success"> {{ session('success') }} </div>
    @endif
   <form method="POST" action="{{route('subscription_submit')}}">            
        @csrf
        <input type="email" placeholder="Enter email" name="email">
        <button type="submit">
            Subscribe
        </button>
    </form>
</div> <!-- email_subs end -->

3. Create A route to show form that accept input values  ie email

Route::post('subscription_submit',[App\Http\Controllers\HomeController::class,'subscription_submit'])->name('subscription_submit');

4. Make model that is use to insert and retrive data from database , also add below two lines 
php artisan make:model Email_alerts 

protected $guarded = [];
protected $table = 'email_alerts'; //custom table name

5. Add new method in controller to handle it

use App\Models\Email_alerts;
public function subscription_submit(Request $request){
        $validated = $request->validate([
           'email' => 'required',
       ]);

        // check if already email exists 
        $record = Email_alerts::where('email', $request->email)->first();
        if(is_null($record)){
            if(auth()->user()){
                $emailis = auth()->user()->email;
                $user_id = auth()->user()->id;
            }else{
                $emailis = $request->email;
                $user_id=NULL;
            }

            $insert = Email_alerts::create([
                'email' => $emailis,                
                'user_id' => auth()->user()->id,
                'alert_status' =>1,
                'alert_nature'=>'daily'
            ]);
            return redirect()->back()
                ->with('success', 'Email Subscription Success.');
        }
        return redirect()->back();
    }

Now data will be inserted to DB

6. Now if you want to update it add below code ie in admin panel

public function index(){
    $user = User::with('has_email_alert')
        ->find(auth()->id());
}
public function update_profile(Request $request){ //used when user click on update
        $update_user = \App\Models\Email_alerts::where('user_id', auth()->id())
        ->where("id", $request->has_email_alert_id)
        ->update(['alert_status' => $request->email_alert]);
        return redirect()->route('profile');
    }

7.Admin panel view

@if(!empty($user->has_email_alert))
    <input type="hidden" name="has_email_alert_id" value="{{ $user->has_email_alert->id }}">
    <input type="checkbox" name="email_alert" @if($user->has_vehcicle_alert->alert_status) checked="true" @endif>
    <button type="submit">Update</button>
@endif

note: add update_profile route and use this method update_profile

 

Posted by: R GONDAL
Email: rizikmw@gmail.com