علیرضا مه آبادی
3 سال پیش توسط علیرضا مه آبادی مطرح شد
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

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


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

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


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

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

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

OR

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

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش آپدیت شد
0

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

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


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش آپدیت شد
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
@rezajahangir 3 سال پیش مطرح شد
0

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

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

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

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

موفق باشید.


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش مطرح شد
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
@rezajahangir 3 سال پیش مطرح شد
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
@ajdar9667 3 سال پیش مطرح شد
0

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


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

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

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

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


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

موفق باشی.


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

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