Table of contents
আজকের ক্লাসে আমাদের students attendance নিয়ে কাজ করা হবে। গতক্লাসে আমাদের যে টাস্ক দেওয়া ছিল সেটা যদি complete না হয়ে থাকে সেটা শেষ করতে হবে আগে নাহলে আজকের ক্লাস করে কিছু বুঝতে পারবেন না। তো students attendance এর যে বিষয় টা সেটা আমাদের ক্লাস ভিত্তিক হয়ে থাকবে এবং এখানে absent এর কোন অপশন থাকবে না শুধু মাত্র present হলে সেটা present দেখাবে। এবং এর জন্য আমরা Database এ শুধু present কেই entry করবে এবং আমাদের function এ condition এর মাধ্যমে সেটা কে id ধরে present return করব।
এবং এখানে আরেকটা বিষয় সেটা হলো আমাদের একবার present হয়ে গেলে সেটা আবার present করার কোন অপশন রাখব না।এর জন্য আমাদের database এর user_id and curriculumn_id unique করে দেব।
চলুন তাহলে শুরু করা যাক।
attendance এর ক্ষেত্রে একটা বিষয় আমাদের মাথায় রাখতে হবে আমাদের কোর্সের ক্লাস টাইম কখন start time and end time এই দুই সময়ের মধ্যেই আমাদের attendance দিতে হবে।এবং এর বাইরে কোন attendance থাকবে না এখনো যেহেতু দেওয়া হয় নাই তাই default ভাবেই থাকবে।
তো প্রথমেই আমাদের curriculum-show blade file এ আমরা গিয়ে সেখানে আমাদের absent কে বাটন এর মধ্যে নিয়ে নেব।
<div class="flex items-center justify-center gap-4">
<button wire:click="attendance({{$student->id}})" class="py-2 px-3 bg-green-500 text-white" type="submit">Present</button>
</div>
এবং যে function এর মধ্যে আমরা declare করলাম এর জন্য আমরা curriculumshow name এ যে আমাদের component file আছে সেখানে গিয়ে function টা লিখব।
public function attendance($student_id) {
Attendance::create([
'curriculum_id' => $this->curriculum_id,
'user_id' => $student_id
]);
flash()->addSuccess('Attendance added successfully!');
}
এবং আমাদের attendance যে মডেল আছেসেখানে আমাদের fillable property দিতে হবে।
protected $fillable = [
'curriculum_id',
'user_id'
];
এবং এখন আমাদের attendance migration file এ একটা unique table add করতে হবে।
$table->unique(['curriculum_id', 'user_id']);
এবার আমাদের terminal এ database seed করতে হবে।
php artisan migrate:fresh --seed
এবার আমাদের ইউজার যেহেতু কোর্সের student তাই আমাদের ইউজার মডেল এ curriculum id এর জন্য function লিখবো।
public function is_present($curriculum_id) {
return Attendance::where('user_id', $this->id)->where('curriculum_id', $curriculum_id)->exists();
}
এবার আমরা আমদের curriculumshow page এ গিয়ে সেখানে condition দিয়ে চেক করব যে আমার student present কি না আর এর জন্য আমাদের প্রয়োজন হবে curriculum id
<div class="flex items-center justify-center gap-4">
@if($student->is_present($curriculum->id))
Presented
@else
<button wire:click="attendance({{$student->id}})" class="py-2 px-3 bg-green-500 text-white">Present</button>
@endif
</div>
এবার আমাদের কোর্সে কতজন student enroll করেছে কতজন present আর কতজন absent সেগুলো আমরা দেখাবো।
এরজন্য আমরা আমাদের curriculum model এ গিয়ে আমাদের function টা লিখবো।
public function presentStudents() {
return Attendance::where('curriculum_id', $this->id)->count();
}
এবং আমরা এটা শো করানোর জন্য আমারা আমাদের curriculumshow page এ গিয়ে সেটাকে দিব।
<h2 class="font-bold mb-2">Students - Present - {{$curriculum->presentStudents()}} | Absent {{$curriculum->course->students()->count() - $curriculum->presentStudents()}}</h2>
এবার আমাদের students গুলো কে সুন্দর ভাবে শো করবে এবং এখানে কতজন student present and কতজন student absent সব গুলো আমরা এখান থেকে দেখতে পারব।
ব্যাস খুব সুন্দর ভাবে আমরা student attendance করে ফেললাম।আশা করি বুঝতে পেরেছেন।
Happy Learning
Rakibul Islam