سلام
من در یک سامانه ی لاراولی که برای آموزشگاه طراحی شده است یک موجودیت دانش آموز دارم. یک موجودیت هم به نام جلسه. دانش آموز و جلسه رابطه ی چند به چند دارند (چرا که یک دانش آموز در چند جلسه و یک جلسه می تواند با چند دانش آموز مرتبط باشد) . این رابطه دارای چند pivot است که از جمله ی آنها status است که وضعیت دانش آموز در جلسه را با 1 (حاضر) و 0 (غایب) مشخص می کند.
*روابط به درستی تعریف شده اند و ثبت جلسه و حضور و غیاب به درستی انجام می شود.
حالا قصد دارم یک جلسه ای که حضور و غیاب در اون انجام شده است رو ویرایش کنم. در این بخش باید بتونم مشخص کنم کدام دانش آموز در این جلسه ی خاص حاضر بوده و کدام غایب که بتوانم در صفحه ی ویرایش آنچه را ثبت شده نمایش دهم.
چطور می تونم این کار رو انجام بدم؟
تصور خودم اینه که می تونم توی مدل دانش آموز یک متد present ایجاد کنم و اونجا وضعیت دانش آموز در یک جلسه ی خاص را خروجی بدم:
-1 : در جلسه ثبت نام نکرده
0: غایب
1: حاضر
ولی مطمئن نیستم این بهترین راه باشه. یه تصور دیگم اینه که باید بتونم با الکوئنت ها همین داده رو در blade استخراج کنم.
ممنون می شم راهنماییم کنید
برای اینکه میخواهید وضعیت حضور و غیاب دانشآموز در یک جلسه خاص را نمایش دهید، از روابط چند به چند در Laravel استفاده کردهاید. میتوانید از ویژگیهای موجود در این نوع روابط (pivot) برای دسترسی به اطلاعات مربوط به جلسه و دانشآموز استفاده کنید.
اولاً، فرض کنیم که مدلها و روابط شما به شکل زیر باشند:
class Student extends Model {
public function sessions() {
return $this->belongsToMany(Session::class)->withPivot('status');
}
}
class Session extends Model {
public function students() {
return $this->belongsToMany(Student::class)->withPivot('status');
}
}
برای چک کردن وضعیت حضور و غیاب یک دانشآموز در یک جلسه خاص، میتوانید از متد زیر استفاده کنید:
class Student extends Model {
public function sessions() {
return $this->belongsToMany(Session::class)->withPivot('status');
}
public function getStatusInSession($sessionId) {
$session = $this->sessions()->where('session_id', $sessionId)->first();
if(!$session) {
return -1; // در جلسه ثبت نام نکرده
}
return $session->pivot->status; // 0: غایب, 1: حاضر
}
}
در صفحهی Blade، میتوانید به شکل زیر از این متد استفاده کنید:
@foreach($students as $student)
@php
$status = $student->getStatusInSession($specificSessionId);
@endphp
@if($status == -1)
ثبت نام نکرده
@elseif($status == 0)
غایب
@else
حاضر
@endif
@endforeach
سلام دوست عزیز
سوال شما به نظر مورد خاصی نداره چیزی که بنده متوجه شدم شما یک رابطه ی چند به چند دارید که میخوایید ویرایش کنیدش همین اگر مورد دیگری هست لطفا خیلی واضح تر بگید
لاراول برای روابط چند به چند از attach برای ذخیره کردن و از detach برای حذف استفاده میکنه که قطعا چون شما ثبت رو انجام میدادید پس این هارو میدونستید
موضوعی که مهمه توی ویرایش استفاده از sync در هنگام ویرایش هست مثال های خوبی خود سایت مرجع زده که براتون منشن کردم اما کلیتش این هست که ایدی هایی دارید در جدول رابطه چند به چند که وقتی توی لیست sync نیاد یعنی اونا حذف بشن و اگر یه مورد خاص از یک ایدی رو بخوایی ویرایش کنی مجدد اون رو توی ارایه میزاری مثل کد زیر
$user->roles()->sync([1 => ['expires' => true], 2, 3]);
راجب فقط نمایش دادن داده هم وقتی میگی رابطه هات درست پیاده شده فقط اون رابطه رو صدا میزنیش دیگ مثلا اگر دانش اموز داری و جلسه (students and meetings) رابطه رو توی مدل دانش اموز اگر تعریف کرده باشی و $currentStudent یک دانش آموز باشه که حضور غیابشو بخایی به شکل زیر میگیری جلساتشو
$currentStuden->meetings
اگر چیز بیشتری مد نظرت هست مدل هات و جداول و کد هات رو به اشتراک بزار ریز تر صحبت کنیم راجبش
برای اینکه میخواهید وضعیت حضور و غیاب دانشآموز در یک جلسه خاص را نمایش دهید، از روابط چند به چند در Laravel استفاده کردهاید. میتوانید از ویژگیهای موجود در این نوع روابط (pivot) برای دسترسی به اطلاعات مربوط به جلسه و دانشآموز استفاده کنید.
اولاً، فرض کنیم که مدلها و روابط شما به شکل زیر باشند:
class Student extends Model {
public function sessions() {
return $this->belongsToMany(Session::class)->withPivot('status');
}
}
class Session extends Model {
public function students() {
return $this->belongsToMany(Student::class)->withPivot('status');
}
}
برای چک کردن وضعیت حضور و غیاب یک دانشآموز در یک جلسه خاص، میتوانید از متد زیر استفاده کنید:
class Student extends Model {
public function sessions() {
return $this->belongsToMany(Session::class)->withPivot('status');
}
public function getStatusInSession($sessionId) {
$session = $this->sessions()->where('session_id', $sessionId)->first();
if(!$session) {
return -1; // در جلسه ثبت نام نکرده
}
return $session->pivot->status; // 0: غایب, 1: حاضر
}
}
در صفحهی Blade، میتوانید به شکل زیر از این متد استفاده کنید:
@foreach($students as $student)
@php
$status = $student->getStatusInSession($specificSessionId);
@endphp
@if($status == -1)
ثبت نام نکرده
@elseif($status == 0)
غایب
@else
حاضر
@endif
@endforeach
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟