سلام خوبیی
ببین به نظر میرسه که فیلد "courseid" و "paymentstatus" رو به عنوان شرط برای جستجو استفاده کردی ولی فک کنم متد where('payment_status','price') کاربرد صحیحی نداره
احتمالاً بجای 'price' باید یه مقدار دیگ رو در نظر بگیریم که مشخص کنه وضعیت پرداخت مورد نظر باشه مثلاً اگخ وضعیت پرداخت رو با استفاده از فیلدی به نام "status" در جدول تعریف کردی میتونی کد زیررو استفاده کنی
php
$count = Transaction::where('course_id', 20)->where('status', 'paid')->count();
اگه اون جواب نداد اینو بزن
$count = Transaction::where('courseid', 20)
->whereIn('paymentstatus', \['paid'\])
->count();سلام دوست عزیز چیزی که شما میخواید خیلی ساده است اما کدی که دادید اگه بخوام از طریق اون راهنمایی کنم باید اطلاعات بیشتری داشته باشم اما با این حال فکر کنم توی where ها اشتباهی انجام دادی اومدی گفتی توی تراکنش ها بیاد و اونایی که course_id شون برابر با 20 هست رو بر گردونه خوب بعد توی اون دیتا ها دوباره بیاد و یه فیلتر دیگه هم اعمال بشه اونایی که payment_status برابر با price رو فقط بر گردون یه نگاه بنداز به دیتابیس ببین این دیتاهایی که فیلتر زدی با همچین نامی توی دیتابیس ذخیره کردی اخه این چیز ساده ای هست احتمالا توی اسم گذاری مشکل داری که 0 برمیگردونه اگه همچنان مشکل داشتی از کدت و مایگریشن جدول تراکنش ها عکس بده تا حداقل بتونم راهنماییت کنم
شاید پاسخ شما همینجا باشد
@FullStack
جدول تراکنش:
Schema::create('transactions', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('transaction_id')->nullable();
$table->string('course_id')->default('vip');
$table->string('price');
$table->string('payment_status');
$table->timestamps();
});
کد :
$count = Transaction::where('course_id', 20)->whereIn('payment_status', 'price')->count();
@Arshiamohammadei
کار نکرد
خوب دوست عزیز شما اومدی توی جدول transactions و course_id رو از جنس رشته در نظر گرفتی و مقدار پیشفرض رو هم vip در نظر گرفتی ولی موقعه کوئری بهش مقدار عددی دادی که برات پیدا کنه باید توی مقدار دادن ها دقت کنیتوی دیتابیس ببین مقدار course_id ها و payment_status ها چی هست ایا برابر با مقداری که میدی هست
@FullStack
مقدار payment_status برابر با ok هست
@FullStack
عدد ۲۰ پاک کردم و همین طور که خودت گفتی صفر بر می گردونه...
یه کاری کن توی این جور مواقعه برنامه نویسا تست نویسی میکنن مثلا اول میان میگن
dd(Transaction::all()->count());
ببینن چن برمیگردونه اگه اوکی بود میرن مرحله بعد تا جایی که مشکل رو پیدا کنن از کدوم قسمت هست بعد مثلا
dd(Transaction::where('course_id ',20)->count());
هر قسمت که بهت صفر برگردوند یعنی اونجا مشکل داری باید اون قسمت بررسی بشه تا ببینیم مشکل چیه ولی اینطور که متوجه شدم مشکل از مقدار ها هست مثلا مقدار رو به صورت رشته توی دیتابیس توی فیلد دادی اما توی کوری به صورت عددی میخوای برات پیدا کنه اگه اون مقداری که توی جدول transactions دادی به course_id به صورت عددی باشه ممکنه مشکل رو حل کنه ولی باز یه سری تستا انجام بده مثلا ببین چه عددی توی دیتابیس هست course_id رو برابر با اون بده بعد ببین برگشت میده یا نه
@FullStack
تست نویسی رو می دونم
تست اول رو زدم عدد ۶ رو می برگردونه
یعنی یک خرید همان صفحه با user_id برابر ۲ بوده که حساب دومی براش ساخته شده, خرید انجام شده است.
@FullStack
مقدار ok ثبت می کنه
کد زیر نگاه کن:
public function result(Request $request)
{
$payment = Transaction::where('transaction_id',request('Authority'))->first();
$course = Course::findOrFail($payment->course_id);
if(request()->get('payment_status') == 'NOK') {
$request->session()->flash('payment_status' , false);
return redirect()->route('home.index');
}
$price = $payment->price;
try {
$receipt = Payment::amount($price)->transactionId(request()->Authority)->verify();
auth()->user()->transactions()->update([
'price'=> $price
]);
$payment->update([
'payment_status'=>'ok',
]);
$request->session()->flash('payment_status' , true);
if($this->AddUserForLearning($payment, $course)) {
return redirect()->route('single.course',$course->slug);
}
} catch (InvalidPaymentException $exception){
$request->session()->flash('payment_status' , false);
return redirect()->route('home.index', ['payment_status' => false]);
}
}@FullStack
والا توصیه این دوستمون @Arshiamohammadei بود که امتحان کردم.
اصن مگه نمیخوای یه کوری بزنی که تعداد محصولات خریده شده هر کاربر رو بر گردونه حالا عددش رو نمایش بدی یا خود محصولات رو نمایش بدی؟
به جای این کارا میتونی یه جدول رابط بزنی بین یوزر ها و محصولات با نام دلخواه بعد ایدی محصول ایدی کاربر و زمان خرید و ... رو توش ذخیره کنی و با استفاده از روابط بیای بین کاربر و این جدول رابطه ایجاد کنی هر کاربر میتونه چندین محصول بخره و هر محصول خریده شده متعلق به یک کاربر بعد خیلی راحت میتونی یوزر رو در بیاری و به این صورت میشه
user()->purchases()->count()
روابط برای همین کارا طراحی شدن که ازشون استفاده کنی نیای دوباره نویسی کنی و کار خودتو سخت تر کنی
@FullStack
این روشی که شما گفتی رو قبلا امتحان کردم که متاسفانه کل محصولات تعداد خرید یکسان نشون میده و یعنی اگر کاربر دیگر محصول خرید کنه به همه محصولات تعداد یک خرید رو ثبت می کنه نه برای کاربری که خرید انجام داده در همان صفحه محصول است...