سلام دوستان من دارم سایت آموزشگاهی درست میکنم
آموزشگاه آنلاین نیست ، به صورت حضوری هست من میخام دکمه ثبت نام دوره که زده شد اطلاعاتش تو دیتابیس ذخیره بشه
یه جدول ایجاد کردم به این شکل
Schema::create('course_user', function (Blueprint $table) {
$table->unsignedBigInteger('course_id');
$table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->primary(['course_id' , 'user_id']);
});
رابطه ها هم به این شکل
مدل course
public function users()
{
return $this->belongsToMany(User::class);
}
مدل user
public function courses()
{
return $this->hasMany(Course::class);
}
این روت درسته ؟
Route::post('courses/{course}' , 'frontend\CourseController@addCourse')->name('addCourse');
کنترلر نمیدونستم دقیقا باید چیکار کنم
public function addCourse(Request $request)
{
$course = auth()->user()->courses()->create();
return redirect(route('course') );
}
دکمه ثبت نام ؟
<a href="{{ route('addCourse' , ['course' => $course->id ] ) }}" class="btn btn-info">ثبت نام دوره</a>
الان تو این حالت وقتی روی دکمه ثبت دوره میزنم وارد روت ایدی دوره میشه و صفحه 404
نمیدونم باید چیکار کنم تو دیتابیس ذخیره بشه`
ممنون میشم دوستان راهنماییم کنید
سلام
ابتدا دکمه ثبت نام رو اینطور تغییر بدید
<a href="{{ route('addCourse' , $course->id ) }}" class="btn btn-info">ثبت نام دوره</a>
اگر روابط چند به چند مشخص کردید باید در هر دو مدل از belongsToMany استفاده کنید.
در کنترلر
public function addCourse(Request $request)
{
$course = Course::findOrFail($request->course_id);
$course->users()->attach(auth()->user()->id);
return redirect(route('course') );
}
سلام. اولین مشکل شما اینه که از تگ a به جای دکمه استفاده کردین.
دکمه که فرم رو submit نمیکنه. از هلپر route برای تعیین اتریبیوت action اون formتون استفاده کنین.
@amirshokoohi64
ممنون باز هم مشکل قبل هست وقتی روی دکمه میزنم هدایت میشه به صفخه 404
و اینکه وقتی هر دو مدل رو belongsToMany میزارم دیگه نمیتونم از پنل مدیریتی پستی تو دیتابیس ذخیره کنم
برای این چیکار کنم ؟
صفحه ای که هدایت میشه
http://localhost:8000/courses/4
@muhammad
الان به این شکل تغییر دادم
<form action="{{ route('addCourse' , $course->id ) }}" method="POST">
@csrf
<button type="submit" class="btn btn-info">ثبت نام دوره</button>
</form>
مدل یوزر
public function courses()
{
return $this->hasMany(Course::class);
}
مدل course
public function users()
{
return $this->belongsToMany(User::class);
}
controller
public function addCourse(Request $request)
{
$course = Course::findOrFail($request->course_id);
$course->users()->attach(auth()->user()->id);
return redirect(route('course') );
}
route
Route::post('courses/{course}' , 'frontend\CourseController@addCourse')->name('addCourse')->middleware('auth');
سلام
اگه رابطه چند به چنده طبیعتا مدل course هم باید belongToMany باشه و اینکه اینم باید دقت کنید که ، اگه جدول واسط رو اسم دلخواه دادید ، باید تو متد belongToMany در آرگومان دومش اسم جدول واسط رو هم بنویسید
public function users()
{
return $this->belongsToMany(User::class,'table_name');
}
و در آخر اینکه ، الان مشکل شما چی هس ؟ چه چیزی دقیقا طبق تفکر شما جلو نمیره ؟
@mamado
وقتی تو مدل یوزر از نوع blongToMany میزارم دیگه تو پنل ادمین نمیتونم دوره ای به دیتابیس ارسال کنم
دلیلش چیه؟
مشکلی اصلی که تو پروژه وجود داره اینه که وقتی وری دکمه ثبت دوره میزنم این url نمایش میده و صفحه 404 نمایش میده
http://localhost:8000/courses/4
حتی این نکاتی که فرمودید انجام دادم باز هم به همین شکل اجرا میشه و دیتایی تو دیتابیس ذخیره نمیشه
اینکه در دیتابیس ذخیره نمیشه که ربطی به اون رابطه نداره قطعا ، دلیلش میتونه خیلی چیزها باشه که با دیدن کد میشه به قطعیت رسید
و اینکه میگید به ارور 404 بر میخورید ، اول کش های رو پاک کنید ، در قدم دوم مراحل پایین رو انجام بدید
Route::post('courses/{course}' , function (){
dd('here');
})->name('addCourse')->middleware('auth');
اگه اجرا شد بعدش اینکارو بکنید ،
public function addCourse(Request $request)
{
dd('here');
$course = Course::findOrFail($request->course_id);
$course->users()->attach(auth()->user()->id);
return redirect(route('course') );
}
چون از تست نویسی استفاده نمی کنید ، مجبورید که دونه دونه با dd باگ یابی کنی ، و مشکل رو حل کنید
@mamado
ddگرفتم اون عبارت here نمایش داد
الان مشکل از روت هست ؟ که 404 نمایش میده ؟
الان تو این حالت از course_id ، dd گرفتم null برمیگردونه
public function addCourse(Request $request)
{
dd($request->course_id);
$course = Course::findOrFail($request->course_id);
$course->users()->attach(auth()->user()->id);
return redirect(route('courses') );
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟