سلام
من برای این بخش نمیدونم چیکار کنم
اگه محصول من قیمتش برابر با صفر هست نیاز به پرداخت نباشه و کاربر لینک رو ببینه و دانلود کنه
برای محصول پولی اگر مثلا پرداخت انجامنداد لینک نبینه و اگر پرداخت شد لینک نمایش بده
برای این نمیدونم دقیقا چیکار کنم
یه فیلد مشخص کردم برای جدول پرداخت که اگه استاتوس برابر با یک هس پرداخت شد و برای جدول سفارش اگر برابر با 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
سلام به این شکل نوشتم
@if($course->price == 0 || $payment->status == 1)
لینک محصول رایگان رو نمایش میده
ولی برای محصول پولی که پرداخت شده لینک نمایش نمیده
مشکل از کنترلر هست که مقدار status رو نال برمیگردونه
$payment->order();
// $payment->status == 1;
// $payment->save();
dd($payment->status);
سلام به شما دوست عزیز.
شما چندتا حالت رو باید چک کنید:
1- اگر دوره قیمتش برابر با صفر بود لینک دانلود نمایش داده بشه.
2- اگر کاربر قبلا دوره رو خریداری کرده بود لینک دانلود دوره بهش نمایش داده بشه.
3- اگر کاربر پرداخت نکرده بود، لینک پرداخت بهش نمایش داده بشه.
حالا برای اینکه چک کنی که ایا کاربر محصول موردنظر رو خریده یا نه میتونی داخل مدل User یه متدی به صورت زیر تعریف کنی:
public function checkPayment($course)
{
return !! Payment::where('user_id' , $this->id)->where('course_id' , $course->id)->first();
}
حالا از متد بالا میتونی به راحتی استفاده کنی.
امیدوارم مفید بوده باشه.
موفق باشید.
ممنونم از شما
الان این متد رو به این شکل تعریف کردم اشتباهه؟
@if($course->price == 0 || auth()->user()->checkPayment())
محصول پرداخت شده هم نمایش نمیده
ببینید من چک کردن ها رو خدمتتون عرض کردم که به چه صورت باید تعریف کنید، دیگه شما بستگی به نیازتون اونجا که میخواین ازشون استفاده کنید.
الان کدی که نوشتین میگه اگه قیمت دوره مساوی صفر یا کاربری که لاگین کرده دوره رو خریده بود، حالا ببینید نیاز پروژه چیه و متناسب با اون ازشون استفاده کنید.
بازم سوالی بود من درخدمتم.
موفق باشید.
من دقیقا همونچیزی که فرمودید منظورم هست ولی به جواب نرسیدم
محصول رایگان اکیه ولی محصول پولی این ارور نمایش میده
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']);
});
اولین نکته اینه که برای تمیزتر بودن کداتون، جداولتونو به صورت زیر بنویسید.
جدول 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 تعریف نشده.
موفق باشید.
@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 بر اساس جدول پرداخت و سفارشات شرط گذاشت تو مدل یوزر؟
شما میتونید یه کار دیگه کنید.
1- جدولاتونو برگردونید به حالت اول.
2- متد checkPayment هم بهش نیازی نیست.
3- حالا از جدول orders بیاید چک کنید کاربرایی که status شون برابر هست با paid، باتن دانلود بهشون نمایش داده بشه.
@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>
دوست عزیز من روند کلی رو خدمتتون عرض کردم الان دلیل نوشتن خط ۵ داخل فانکشن single رو درک نمیکنم؟؟؟؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟