راکت

عدم درک ارور مربوط به دیتا بیس

10 پاسخ

عرض ادب بنده در بخش درگاه پرداخت با این ارور مواجه شدم منظورشو متوجه نمی شم؟

Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'order_id' doesn't have a default value (SQL: insert into `payments` (`status`, `updated_at`, `created_at`) values (1, 2021-07-04 15:03:02, 2021-07-04 15:03:02))
http://localhost:8000/payment/callback?clientrefid=CnBiKli3IQsvqv7I&refid=70016622541

ربطی به مدل و فیل ایبل نداره؟

ثبت پرسش جدید

پاسخ‌ها

10
امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

به order_id مقدار ندادی و مقدار پیش فرض هم نداره

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

$table->string('order_id')->nullable();

OR

$table->string('order_id')->default('');

شاید پاسخ شما همین‌جا باشد

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

شما جدولی داری به نام payments که فیلدی داره به نام orderid
وقتی میخواهی ردیفی به این جدول اضافه کنی اگر مقداری برای orderid وارد نکنی در سطح دیتابیس با خطا روبرو میشی

حالا یا در حین وارد کردن داده هات این فیلد رو وارد نمیکنی یا داخل آرایه fillable مدل Payment اضافه نشده

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

مهندسین عزیز @ajdar9667
من یه دستوری دادم که در صورت موفقیت آمیز بودن این بخش اجراشود

     $payment->orders()->create([
                    'status'=>'paid'
                ]);

و ارور مربوط به کد بالاست. و این مایگریشن و مدل payment

   Schema::create('payments', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('order_id');
            $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');
            $table->boolean('status')->default(0);
            $table->string('resnumber');
            $table->timestamps();
        });
class Payment extends Model
{
    protected $fillable=['status','resnumber'];

    use HasFactory;
    public function orders(){
        return $this->belongsTo(Order::class);
    }
}

اینم مایگریشن و مدل order

   Schema::create('orders', function (Blueprint $table) {
            $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','cancel']);
            $table->string('serials')->nullable();
            $table->timestamps();
        });

class Order extends Model
{
    use HasFactory;
    protected $fillable=['price','serials','status'];

    public function payment(){
        return $this->hasMany(Payment::class);
    }
```خیلی ممنون میشم راهنماییم کنید🙏
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام.
در مدل Payment، باید $fillable رو به صورت زیر بنویسید:

protected $fillable=['order_id', 'status', 'resnumber'];

همچنین در مدل Order، باید $fillable رو به صورت زیر بنویسید:

protected $fillable=['user_id', 'price', 'serials', 'status'];

موفق باشید.

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@rezajahangir مهندس عزیز این کارم کردم اما همون ارور یعنی

Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'order_id' doesn't have a default value (SQL: insert into `payments` (`status`, `updated_at`, `created_at`) values (1, 2021-07-04 21:12:22, 2021-07-04 21:12:22))

میاد. مثل کد استاد موسوی میزنم اما نمی دونم مشکل چیه

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

شما یه جا داری اشتباه میکنی، مایگریشن payments رو به صورت زیر بنویس.

Schema::create('payments', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
    $table->boolean('status')->default(0);
    $table->string('resnumber');
    $table->timestamps();
});

مدل Payment هم باید به صورت زیر تغییر کنه.

protected $fillable=['user_id', 'status', 'resnumber'];
امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

الان میخای مقدار order_id رو به چه صورت وارد کنه ؟ هیچی داخلش نباشه؟ اوتو اینکرایمنت باشه ؟ چی باشه ؟

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@rezajahangir @ajdar9667 @ali.bayat متوجه ایراد کار شدم

                $payment->orders()->create([
                    'status'=>'paid'
                ]);

به جای create باید update می گذاشتم 😭
دست بوس تک تکتونم خیلی ممنون از وقتی گرانبهایی که گذاشتید 🙏🙏🙏🙏یه دنیا ممنون.بازم معذرت می خوام

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

موفق باشی.

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

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