PDA

View Full Version : ثبت داده در جدول واسط



imohammad
یک شنبه 14 تیر 1394, 11:54 صبح
سلام
من دوتا جدول دارم:
students: id - name
courses: id - name
و یه جدول واسط دارم
student_course: id - student_id - course_id - num
که توی جدول واسط num وظیفهٔ نگهداری نمرهٔ هر دانش آموز از هر درس رو داره
حالا سوال اینه چطوری نمره رو تو جدول واسط ذخیره کنم و چطوری فراخوانی کنم نمرات هر دانش آموز به تفکیک درس رو؟

ممنون

djtrex
یک شنبه 14 تیر 1394, 16:10 عصر
سلام
من دوتا جدول دارم:
students: id - name
courses: id - name
و یه جدول واسط دارم
student_course: id - student_id - course_id - num
که توی جدول واسط num وظیفهٔ نگهداری نمرهٔ هر دانش آموز از هر درس رو داره
حالا سوال اینه چطوری نمره رو تو جدول واسط ذخیره کنم و چطوری فراخوانی کنم نمرات هر دانش آموز به تفکیک درس رو؟

ممنون

اگه این رابطه شما در مدل Student باشه:



public function courses()
{
return $this->belongsToMany(Course::class, 'student_course')->withPivot('num');
}


(با with pivot میتونید فیلد های مورد نظر خودتونو از جدول واسط نشون بدید- آرگومان دوم belongsToMany به خاطر اینه که به ترتیب حروف الفبا جدول واسط رو نساختید (course_student) در نتیجه باید به لاراول بگید جدول واسط چی هست.)

با این روش میتونید نمرات درس های یه دانش آموز رو نشون بدید:



$student = Student::find($id);


foreach($student->courses as $course){
echo $course->pivot->num;
}

آبجکت pivot همان جدول واسط شماست.
======

برای insert هم اگه یدونه درس هست:



$student = Student::find($id);


$student->courses()->attach($courseId, ['num' => 18]);


اگه چند تا درس هست:



$student->courses()->attach(
[
1 => ['num' => 18],
2 => ['num' => 15.25],
3 => ['num' => 10]
]
);


کلید ها آی دی درس ها هست.

اطلاعات بیشتر:
http://laravel.com/docs/master/eloquent-relationships