راکت

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

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="https://roocket.ir/{{ route('addCourse' , ['course' => $course->id ] ) }}" class="btn btn-info">ثبت نام دوره</a>

الان تو این حالت وقتی روی دکمه ثبت دوره میزنم وارد روت ایدی دوره میشه و صفحه 404
نمیدونم باید چیکار کنم تو دیتابیس ذخیره بشه`
ممنون میشم دوستان راهنماییم کنید

ثبت پرسش جدید

پاسخ‌ها

8
امیر حسین شکوهی
امیر حسین شکوهی
@amirshokoohi

تخصص: web developer

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

<a href="https://roocket.ir/{{ 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
Muhammad
@muhammad

تخصص: Back-End Developer

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

شاید پاسخ شما همین‌جا باشد

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

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

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

http://localhost:8000/courses/4
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@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

تخصص: در حال یادگیری ...

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

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

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

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

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

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

http://localhost:8000/courses/4

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

ممدو
ممدو
@mamado

تخصص: در حال یادگیری ...

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

و اینکه میگید به ارور 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
@paradox

تخصص: در حال یادگیری

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

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

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