Paradox
3 سال پیش توسط Paradox مطرح شد
8 پاسخ

سایت آموزشگاهی

سلام دوستان من دارم سایت آموزشگاهی درست میکنم
آموزشگاه آنلاین نیست ، به صورت حضوری هست من میخام دکمه ثبت نام دوره که زده شد اطلاعاتش تو دیتابیس ذخیره بشه

یه جدول ایجاد کردم به این شکل

        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
نمیدونم باید چیکار کنم تو دیتابیس ذخیره بشه`
ممنون میشم دوستان راهنماییم کنید


ثبت پرسش جدید
امیر حسین شکوهی
تخصص : web developer
@amirshokoohi 3 سال پیش آپدیت شد
1

سلام
ابتدا دکمه ثبت نام رو اینطور تغییر بدید

<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') );
    }

Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
-1

سلام. اولین مشکل شما اینه که از تگ a به جای دکمه استفاده کردین.
دکمه که فرم رو submit نمی‌کنه. از هلپر route برای تعیین اتریبیوت action اون formتون استفاده کنین.


Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش آپدیت شد
0

@amirshokoohi64
ممنون باز هم مشکل قبل هست وقتی روی دکمه میزنم هدایت میشه به صفخه 404
و اینکه وقتی هر دو مدل رو belongsToMany میزارم دیگه نمیتونم از پنل مدیریتی پستی تو دیتابیس ذخیره کنم
برای این چیکار کنم ؟

صفحه ای که هدایت میشه

http://localhost:8000/courses/4

Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش مطرح شد
0

@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');

ممدو
تخصص : در حال یادگیری ...
@mamado 3 سال پیش مطرح شد
0

سلام
اگه رابطه چند به چنده طبیعتا مدل course هم باید belongToMany باشه و اینکه اینم باید دقت کنید که ، اگه جدول واسط رو اسم دلخواه دادید ، باید تو متد belongToMany در آرگومان دومش اسم جدول واسط رو هم بنویسید

  public function users()
    {
        return $this->belongsToMany(User::class,'table_name');
    }

و در آخر اینکه ، الان مشکل شما چی هس ؟ چه چیزی دقیقا طبق تفکر شما جلو نمیره ؟


Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش آپدیت شد
0

@mamado
وقتی تو مدل یوزر از نوع blongToMany میزارم دیگه تو پنل ادمین نمیتونم دوره ای به دیتابیس ارسال کنم
دلیلش چیه؟

مشکلی اصلی که تو پروژه وجود داره اینه که وقتی وری دکمه ثبت دوره میزنم این url نمایش میده و صفحه 404 نمایش میده

http://localhost:8000/courses/4

حتی این نکاتی که فرمودید انجام دادم باز هم به همین شکل اجرا میشه و دیتایی تو دیتابیس ذخیره نمیشه


ممدو
تخصص : در حال یادگیری ...
@mamado 3 سال پیش مطرح شد
0

اینکه در دیتابیس ذخیره نمیشه که ربطی به اون رابطه نداره قطعا ، دلیلش میتونه خیلی چیزها باشه که با دیدن کد میشه به قطعیت رسید

و اینکه میگید به ارور 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 باگ یابی کنی ، و مشکل رو حل کنید


Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش آپدیت شد
0

@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') );
    }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام