Paradox
2 سال پیش توسط Paradox مطرح شد
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="{{ 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']));
    }

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


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 2 سال پیش مطرح شد
1

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


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

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

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

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

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

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

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

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

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

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


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

@rezajahangir

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

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

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

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


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

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

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

اولین نکته اینه که برای تمیزتر بودن کداتون، جداولتونو به صورت زیر بنویسید.
جدول 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 2 سال پیش آپدیت شد
0

@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 بر اساس جدول پرداخت و سفارشات شرط گذاشت تو مدل یوزر؟


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

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


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

@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="{{ 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>

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

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


Paradox
تخصص : در حال یادگیری
@paradox 2 سال پیش مطرح شد
رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

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


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

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