راکت

محصول رایگان و پولی

13 پاسخ

سلام
من برای این بخش نمیدونم چیکار کنم
اگه محصول من قیمتش برابر با صفر هست نیاز به پرداخت نباشه و کاربر لینک رو ببینه و دانلود کنه
برای محصول پولی اگر مثلا پرداخت انجام‌نداد لینک نبینه و اگر پرداخت شد لینک نمایش بده

برای این نمیدونم دقیقا چیکار کنم
یه فیلد مشخص کردم برای جدول پرداخت که اگه استاتوس برابر با یک هس پرداخت شد و برای جدول سفارش اگر برابر با paid بود، که پرداخت شده و نشده مشخص بشه

بلید

   <div class="col-lg-3 text-center">
                            @if($payment->status == 1)
                            <i class="fa fa-download" aria-hidden="true"></i>
                            @auth
                            <a class="text-light" href="https://roocket.ir/{{ url( $episode->file ) }}"> دانلود </a>
                            @endauth
                            @else

                            <i class="fa fa-lock" aria-hidden="true"></i>

                            @endif

                            @guest
                            <a href="/login/" class="text-light"> لطفا وارد سایت شوید.</a>
                            @endguest

                        </div>

کنترلر

    public function single(Course $course , Payment $payment)
    {

        $payment->order();
        // $payment->status == 'paid';
        // $payment->status == 1;
        // $payment->save();
        dd($payment->status);

        return view('courses.single-courses' , compact(['course' ,'payment']));
    }

حالا اینجا بر این اساس شرط میزارم نال برمیگردونه

ثبت پرسش جدید

پاسخ‌ها

13
سینا شاه‌اویسی
سینا شاه‌اویسی
@sinashahoveisi

تخصص: برنامه نویس

سلام
شما علاوه بر جدول پرداخت باید، اطلاعات خود اون محصول رو هم ببینید و شرطش به این صورت میشه:
اگر محصول قیمتش صفر بود یا کاربر پرداخت کرده بود، دانلود رو نشون بده
در غیر این صورت پرداخت رو نشون بده

Paradox
Paradox
@paradox

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

@sinashahoveisi
سلام به این شکل نوشتم

                            @if($course->price == 0 || $payment->status == 1)

لینک محصول رایگان رو نمایش میده
ولی برای محصول پولی که پرداخت شده لینک نمایش نمیده

مشکل از کنترلر هست که مقدار status رو نال برمیگردونه

        $payment->order();
        // $payment->status == 1;
        // $payment->save();
        dd($payment->status);

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

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام به شما دوست عزیز.
شما چندتا حالت رو باید چک کنید:
1- اگر دوره قیمتش برابر با صفر بود لینک دانلود نمایش داده بشه.
2- اگر کاربر قبلا دوره رو خریداری کرده بود لینک دانلود دوره بهش نمایش داده بشه.
3- اگر کاربر پرداخت نکرده بود، لینک پرداخت بهش نمایش داده بشه.
حالا برای اینکه چک کنی که ایا کاربر محصول موردنظر رو خریده یا نه میتونی داخل مدل User یه متدی به صورت زیر تعریف کنی:

public function checkPayment($course) 
{
    return !! Payment::where('user_id' , $this->id)->where('course_id' , $course->id)->first();
}

حالا از متد بالا میتونی به راحتی استفاده کنی.
امیدوارم مفید بوده باشه.
موفق باشید.

Paradox
Paradox
@paradox

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

@rezajahangir

ممنونم از شما
الان این متد رو به این شکل تعریف کردم اشتباهه؟

                            @if($course->price == 0 || auth()->user()->checkPayment())

محصول پرداخت شده هم نمایش نمیده

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

ببینید من چک کردن ها رو خدمتتون عرض کردم که به چه صورت باید تعریف کنید، دیگه شما بستگی به نیازتون اونجا که میخواین ازشون استفاده کنید.
الان کدی که نوشتین میگه اگه قیمت دوره مساوی صفر یا کاربری که لاگین کرده دوره رو خریده بود، حالا ببینید نیاز پروژه چیه و متناسب با اون ازشون استفاده کنید.
بازم سوالی بود من درخدمتم.
موفق باشید.

Paradox
Paradox
@paradox

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

@rezajahangir

من دقیقا همونچیزی که فرمودید منظورم هست ولی به جواب نرسیدم
محصول رایگان اکیه ولی محصول پولی این ارور نمایش میده

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'where clause' (SQL: select * from `payments` where `user_id` = 1 and `course_id` = 11 limit 1) (View: C:\xampp\htdocs\idejet.ir\resources\views\courses\single-courses.blade.php)

جدول payment

   $table->id();
            $table->unsignedBigInteger('order_id');
            $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');
            $table->string('resnumber');
            $table->boolean('status')->default(0);
            $table->timestamps();

جدول orders

   $table->id();

            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->BigInteger('price');
            $table->enum('status' , ['unpaid' , 'paid' , 'preparation' , 'posted' , 'received' , 'canceled']);
            $table->string('tracking_serial')->nullable();
            $table->timestamps();

جدول course_order

     Schema::create('course_order', function (Blueprint $table) {
            $table->unsignedBigInteger('course_id');
            $table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
            $table->unsignedBigInteger('order_id');
            $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');

            $table->integer('quantity');

            $table->primary(['course_id','order_id']);
        });
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

اولین نکته اینه که برای تمیزتر بودن کداتون، جداولتونو به صورت زیر بنویسید.
جدول payments:

$table->id();
$table->foreignId('order_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->string('resnumber');
$table->boolean('status')->default(0);
$table->timestamps();

جدول orders:

$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->BigInteger('price');
$table->enum('status' , ['unpaid' , 'paid' , 'preparation' , 'posted' , 'received' , 'canceled']);
$table->string('tracking_serial')->nullable();
$table->timestamps();

جدول course_order:

$table->foreignId('course_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->foreignId('order_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->integer('quantity');
$table->primary(['course_id','order_id']);

دلیل اروری که بهتون میده، اینه که فیلد user_id داخل جدول payments تعریف نشده.
موفق باشید.

Paradox
Paradox
@paradox

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

@rezajahangir
ممنونم
user_id قرار دادم الان این ارور نمایش میده

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'course_id' in 'where clause' (SQL: select * from `payments` where `user_id` = 1 and `course_id` = 2 limit 1)

course_id هم باید تو جدول payments قرار دادم

حالا موقع پرداخت این ارور دارم

SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `payments` (`resnumber`, `order_id`, `updated_at`, `created_at`) values (97b11dc7-3334-415f-ad16-df6e350ee571, 1, 2022-06-05 14:00:32, 2022-06-05 14:00:32))

نمیشد به جای user_id و course_id بر اساس جدول پرداخت و سفارشات شرط گذاشت تو مدل یوزر؟

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

شما میتونید یه کار دیگه کنید.
1- جدولاتونو برگردونید به حالت اول.
2- متد checkPayment هم بهش نیازی نیست.
3- حالا از جدول orders بیاید چک کنید کاربرایی که status شون برابر هست با paid، باتن دانلود بهشون نمایش داده بشه.

Paradox
Paradox
@paradox

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

@rezajahangir
به این شکل نوشتم ولی نتیجه ای نگرفتم
کنترلر اشتباه هست ؟

کنترلر

    public function single(Course $course)
    {
        $course->increment('view_count');
        // $this->authorize('view' , $order);
        $orders = auth()->user()->orders()->get();

        // dd($order);  
        return view('courses.single-courses' , compact(['course' , 'orders']));
    }

ویو

  <div class="col-lg-3 text-center">
                            @if($course->price == 0)
                                @foreach($orders as $order)
                                @if ($order->status == 'paid')
                                <i class="fa fa-download" aria-hidden="true"></i>
                                @endif
                                @endforeach

                                @auth
                                <a class="text-light" href="https://roocket.ir/{{ url( $episode->file ) }}"> دانلود </a>
                                @endauth

                            @else

                              <i class="fa fa-lock" aria-hidden="true"></i>

                            @endif

                            @guest
                                <a href="/login/" class="text-light"> لطفا وارد سایت شوید.</a>
                            @endguest

                        </div>
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

متد single مربوط به تک صفحه هر دوره ه میشه؟

Paradox
Paradox
@paradox

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

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

دوست عزیز من روند کلی رو خدمتتون عرض کردم الان دلیل نوشتن خط ۵ داخل فانکشن single رو درک نمیکنم؟؟؟؟

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

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