روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ پویا پارسایی
()BadMethodCallException Call to undefined method App\\Models\\Payment::order
جامعه پی اچ پی ایجاد شده در ۰۷ دی ۱۴۰۰

سلام و عرض ادب

طبق ویدئو که پیش میرم وقتی که میخوام orderی که به payment متصله رو آپدیت کنم به این خطا میخورم.

BadMethodCallException Call to undefined method App\\Models\\Payment::order()

متد callback توی کنترلر PaymentController:

    public function callback(Request $request)
    {
        $paymentInfo = $request->all();
        $idPayVerifyRequest = new IDPayVerifyRequest([
            'orderId' => $paymentInfo['order_id'],
            'id' => $paymentInfo['id'],
            'apiKey' => config('services.gateways.idpay.api_key'),
        ]);
        $paymentService = new PaymentService(PaymentService::IDPAY, $idPayVerifyRequest);
        $result = $paymentService->verify();
        if (!$result['status']) {
            return redirect()->route('home.checkout')->with('failed', 'خطا در پرداخت.');
        }
        if ($result['statusCode'] == 101) {
            return redirect()->route('home.checkout')->with('failed', 'پرداخت شما قبلا انجام شده است و نیازی به پرداخت مجدد نیست. فایل‌های مربوطه به ایمیل شما ارسال شده است.');
        }
        $currentPayment = Payment::where('ref_code',$result['data']['order_id'])->first();
        $currentPayment->update([
            'status' =>'paid',
            'res_id'=>$result['data']['track_id'],
        ]);
        $currentPayment->order()->update([
            'status' =>'paid'
        ]);
    }
}

کلاس Payment:

class Payment extends Model
{
    use HasFactory;
    protected $guarded = [];
}

کلاس Order:

class Order extends Model
{
    use HasFactory;
    protected $guarded = [];
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    public function payment()
    {
        return $this->hasOne(Payment::class);
    }
    public function orderItems()
    {
        return $this->hasMany(OrderItem::class);
    }
}

البته متد order رو به این صورت به مدل Payment هم اضافه کردم:

class Payment extends Model
{
    use HasFactory;
    protected $guarded = [];
    public function order()
    {
        return $this->hasOne(Order::class);
    }
}

ولی این خطا رو میگیرم:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orders.payment_id' in 'where clause' (SQL: update `orders` set `status` = paid, `orders`.`updated_at` = 2021-12-28 15:20:33 where `orders`.`payment_id` = 16 and `orders`.`payment_id` is not null)

چون که اصلا توی جدول orders ما payment_id نداریم.

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

ممنون، حل شد.

باید این متد رو به مدل Payment اضافه میکردم.

public function order()
{
    return $this->belongsTo(Order::class);
}
پویا پارسایی ۰۷ دی ۱۴۰۰، ۱۵:۲۶

بسیار عالی ...

بهترین پاسخ
لقمان آوند ۰۷ دی ۱۴۰۰، ۱۶:۲۲