رایموند
1 سال پیش توسط رایموند مطرح شد
16 پاسخ

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

درود دوستان...
می خوام تعداد محصول خریداری شده در هر کاربر نمایش دهد.
این کد به کار بردم اما صفر رو نشون میده:

$count = Transaction::where('course_id', 20)->where('payment_status','price')->count();

ثبت پرسش جدید
Arshiamohammadei
تخصص : وب و هوش مصنوعی
@Arshiamohammadei 1 سال پیش آپدیت شد
0

سلام خوبیی
ببین به نظر میرسه که فیلد "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();

میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

سلام دوست عزیز چیزی که شما میخواید خیلی ساده است اما کدی که دادید اگه بخوام از طریق اون راهنمایی کنم باید اطلاعات بیشتری داشته باشم اما با این حال فکر کنم توی where ها اشتباهی انجام دادی اومدی گفتی توی تراکنش ها بیاد و اونایی که course_id شون برابر با 20 هست رو بر گردونه خوب بعد توی اون دیتا ها دوباره بیاد و یه فیلتر دیگه هم اعمال بشه اونایی که payment_status برابر با price رو فقط بر گردون یه نگاه بنداز به دیتابیس ببین این دیتاهایی که فیلتر زدی با همچین نامی توی دیتابیس ذخیره کردی اخه این چیز ساده ای هست احتمالا توی اسم گذاری مشکل داری که 0 برمیگردونه اگه همچنان مشکل داشتی از کدت و مایگریشن جدول تراکنش ها عکس بده تا حداقل بتونم راهنماییت کنم


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
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
کار نکرد


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

خوب دوست عزیز شما اومدی توی جدول transactions و course_id رو از جنس رشته در نظر گرفتی و مقدار پیشفرض رو هم vip در نظر گرفتی ولی موقعه کوئری بهش مقدار عددی دادی که برات پیدا کنه باید توی مقدار دادن ها دقت کنیتوی دیتابیس ببین مقدار course_id ها و payment_status ها چی هست ایا برابر با مقداری که میدی هست


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
0

@FullStack
مقدار payment_status برابر با ok هست
 تصویر


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

ببینید این بخش رو پاک کنید و نتیجه رو ببینید

->whereIn('payment_status', 'price')

ببینید چی بر میگردونه اصلا جوابی بر میگردونه البته با این اطلاععات داخل دیتابیس هیچکدوم برابر با 20 نیست این اطلاعاتی بهش دادید با اطلاعات داخل دیتابیس برابری نمیکنه


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
0

@FullStack
عدد ۲۰ پاک کردم و همین طور که خودت گفتی صفر بر می گردونه...


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

یه کاری کن توی این جور مواقعه برنامه نویسا تست نویسی میکنن مثلا اول میان میگن

dd(Transaction::all()->count());

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

dd(Transaction::where('course_id ',20)->count());

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
0

@FullStack
تست نویسی رو می دونم
تست اول رو زدم عدد ۶ رو می برگردونه
یعنی یک خرید همان صفحه با user_id برابر ۲ بوده که حساب دومی براش ساخته شده, خرید انجام شده است.


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

خوب پس با این حساب مشکل میشه از بخش payment_status چه مقداری بهش میدی؟ price؟


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
0

@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 1 سال پیش مطرح شد
0

اها پس چرا موقعه کوری زدن این خط کد رو بهش اضافه کردی؟

->whereIn('payment_status', 'price')

whereIn میاد حالا مثلا یه آرایه میگیره و کاوش میکنه توی دیتابیس و فیلدی که تعریف کردی هر کدوم مقدارش با یکی از خونه های این آرایه بود رو به لیست اضافه میکنه


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
0

@FullStack
والا توصیه این دوستمون @Arshiamohammadei بود که امتحان کردم.


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

اصن مگه نمیخوای یه کوری بزنی که تعداد محصولات خریده شده هر کاربر رو بر گردونه حالا عددش رو نمایش بدی یا خود محصولات رو نمایش بدی؟
به جای این کارا میتونی یه جدول رابط بزنی بین یوزر ها و محصولات با نام دلخواه بعد ایدی محصول ایدی کاربر و زمان خرید و ... رو توش ذخیره کنی و با استفاده از روابط بیای بین کاربر و این جدول رابطه ایجاد کنی هر کاربر میتونه چندین محصول بخره و هر محصول خریده شده متعلق به یک کاربر بعد خیلی راحت میتونی یوزر رو در بیاری و به این صورت میشه

user()->purchases()->count()

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش آپدیت شد
0

@FullStack
این روشی که شما گفتی رو قبلا امتحان کردم که متاسفانه کل محصولات تعداد خرید یکسان نشون میده و یعنی اگر کاربر دیگر محصول خرید کنه به همه محصولات تعداد یک خرید رو ثبت می کنه نه برای کاربری که خرید انجام داده در همان صفحه محصول است...


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 1 سال پیش مطرح شد
0

ممکنه اشتباه کد نویسی خوب اخه لاراول یک قسمت نداره که بگی مشکل از اون قسمته حل میشه جداول هستن کد نویسی هست نوع داده هست باید همه اینا اول چک بشه اگه میخوای با برنامه anydesk میتونم وصل بشم کداتو ویرایش بزنم تست بزنم تا اوکی بشه


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

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