I have stored procedure which is doing a task. When i try to execute in the controller it takes more time. So i planned to put as Job. When i try to execute nothing happens in the execution
Controller
try {
$emailAddress = auth()->user()->email ?? NULL;
SubjectAllocationAllJob::dispatch(
$request->course,
$request->regulation,
$request->batch,
$request->semester,
$emailAddress
);
Alert::success('Exam Application Started Successfully. You will recieve email shortly');
return redirect()->route('admin.exam.preprocess.subjectmapping.all');
} catch (Exception $e) {
Alert::error('Error Mapping Exam Application');
return redirect()->back()->withInput();
}
SubjectAllocationAllJob
<?php
namespace App\Jobs\ExamPreProcess;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use App\Mail\SubjectMappingAllSuccessMail;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
class SubjectAllocationAllJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $regulation;
public $course;
public $batch;
public $semester;
public $email;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($regulation, $course, $batch, $semester, $email)
{
$this->regulation = $regulation;
$this->course = $course;
$this->batch = $batch;
$this->semester = $semester;
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
DB::select(
'CALL SubjectAllocation(?,?,?,?,?)',
array(
$this->course,
$this->regulation,
$this->batch,
$this->semester,
session('ExamID')
)
);
if (!empty($this->email)) {
Mail::to($this->email)->send(new SubjectMappingAllSuccessMail());
}
}
}
Job is running properly and i also i am getting an email. But in the mysql server nothing happens. If i try to run separately it is working fine.
procedure
DELIMITER $$
DROP PROCEDURE IF EXISTS SubjectAllocation $$
CREATE PROCEDURE `SubjectAllocation`(
IN coursesin VARCHAR(25),
IN regulationsin VARCHAR(25),
IN batchin VARCHAR(25),
IN semesterin VARCHAR(25),
IN examyearin VARCHAR(2)
)
BEGIN
DROP
TEMPORARY TABLE IF EXISTS `subjectassign`; CREATE TEMPORARY TABLE `subjectassign` (
`subject_id` INT, `student_id` INT,
`subjecttype_id` INT
); INSERT INTO `subjectassign`
SELECT
`subjects`.`id`,
`students`.`id`,
`subjects`.`subjecttype_id`
FROM
`subjects`,
`students`
WHERE
`subjects`.`programme_id` = `students`.`programme_id`
AND `subjects`.`regulation_id` = `students`.`regulation_id`
AND `subjects`.`course_id` = `students`.`course_id`
AND `subjects`.`subjectallocationtype_id` IS NULL
AND `subjects`.`semester` = semesterin
AND `students`.`regulation_id` = regulationsin
AND `students`.`course_id` = coursesin
AND `students`.`batch_id` = batchin; DELETE `subjectassign`
FROM
`subjectassign`
RIGHT JOIN `exam_applications` ON `subjectassign`.`student_id` = `exam_applications`.`student_id`
AND `subjectassign`.`subject_id` = `exam_applications`.`subject_id`; INSERT INTO `exam_applications`(
`student_id`, `subject_id`, `exammonth_id`,
`examtype_id`, `exampapertype_id`,
`verification`, `display`
)
SELECT
DISTINCT `student_id`,
`subject_id`,
examyearin,
'1',
'1',
'N',
'Y'
FROM
`subjectassign`;
DROP
TEMPORARY TABLE IF EXISTS `tmp_internalmark`; CREATE TEMPORARY TABLE `tmp_internalmark` (
`subject_id` INT, `student_id` INT
); INSERT INTO `tmp_internalmark`
SELECT
`subjects`.`id`,
`students`.`id`
FROM
`subjects`,
`students`
WHERE
`subjects`.`programme_id` = `students`.`programme_id`
AND `subjects`.`regulation_id` = `students`.`regulation_id`
AND `subjects`.`course_id` = `students`.`course_id`
AND `subjects`.`subjectallocationtype_id` IS NULL
AND `subjects`.`semester` = semesterin
AND `students`.`regulation_id` = regulationsin
AND `students`.`course_id` = coursesin
AND `students`.`batch_id` = batchin; DELETE `tmp_internalmark`
FROM
`tmp_internalmark`
RIGHT JOIN `internal_marks` ON `tmp_internalmark`.`student_id` = `internal_marks`.`student_id`
AND `tmp_internalmark`.`subject_id` = `internal_marks`.`subject_id`;
INSERT INTO `internal_marks`(
`student_id`, `subject_id`, `exammonth_id`,
`batch_id`
)
SELECT
DISTINCT `student_id`,
`subject_id`,
examyearin,
batchin
FROM
`tmp_internalmark`;
END $$
DELIMITER ;