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