راکت

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

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

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

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


ثبت پرسش جدید
امیر علی
امیر علی
تخصص :طراح و توسعه دهنده fullstack
@ajdar96675 سال پیشمطرح شد
0

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


امیر علی
امیر علی
تخصص :طراح و توسعه دهنده fullstack
@ajdar96675 سال پیشمطرح شد
0

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

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

OR

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

علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat5 سال پیشمطرح شد
0

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

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


علیرضا مه آبادی
علیرضا مه آبادی
تخصص :در حال یادگیری لاراول
@aliasgharkashani13795 سال پیشمطرح شد
0

مهندسین عزیز @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);
    }
```خیلی ممنون میشم راهنماییم کنید🙏

رضا جهانگیر
رضا جهانگیر
تخصص :Full-Stack Developer
@rezajahangir5 سال پیشمطرح شد
0

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

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

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

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

موفق باشید.


علیرضا مه آبادی
علیرضا مه آبادی
تخصص :در حال یادگیری لاراول
@aliasgharkashani13795 سال پیشمطرح شد
0

@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))

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


رضا جهانگیر
رضا جهانگیر
تخصص :Full-Stack Developer
@rezajahangir5 سال پیشمطرح شد
0

شما یه جا داری اشتباه میکنی، مایگریشن 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'];

امیر علی
امیر علی
تخصص :طراح و توسعه دهنده fullstack
@ajdar96675 سال پیشمطرح شد
0

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


علیرضا مه آبادی
علیرضا مه آبادی
تخصص :در حال یادگیری لاراول
@aliasgharkashani13795 سال پیشمطرح شد
0

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

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

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


امیر علی
امیر علی
تخصص :طراح و توسعه دهنده fullstack
@ajdar96675 سال پیشمطرح شد
0

موفق باشی.


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

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