asani
5 سال پیش توسط asani مطرح شد
6 پاسخ

مشکل با آن دلیت

سلام
من برای همه کلید های خارجی onDelete('cascade') گذاشتم ولی کار نمیکنه! خیلی سرچ کردم گفته بودن $table->engine='InnoDB' بزارم که وقتی گذاشتم ارور میگرفت که نمیتونه پرایمری جدول اول رو داخل فیلد کلید خارجی جدول دوم بزاره !


ثبت پرسش جدید
Saleh330
@saleh.hesfandiari 5 سال پیش مطرح شد
1

شما احتمالاً دارید از لاراول 5.8 استفاده میکنید توی لاراول 5.8 وقتی که references شما bigIncrements هست حتماً باید کلید خارجیتون هم bigInteger باشه. یعنی باید type این دوتا با هم یکی باشه.
الآن باید type ستون های tashakol_id و f101_id داخل دیتا بیستون bigInteger باشه.
این کار رو بکنید ببینیم مشکل حل میشه یا نه.


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

سلام دوست عزیز کار میکنه که نداریم
ارورتون رو بفرمایید تا بتونیم متوجه بشیم مشکل چیه


asani
تخصص : کارشناس فنی
@ali.asani 5 سال پیش مطرح شد
0

اروری نمیده !
فقط و فقط همون مورد رو حذف میکنه ! مواردی که در تیبل های دیگه با کلید خارجی به اون مورد مرتبط شدن رو حذف نمیکنه !
همین


Saleh330
@saleh.hesfandiari 5 سال پیش مطرح شد
0

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


asani
تخصص : کارشناس فنی
@ali.asani 5 سال پیش آپدیت شد
0

این مایگریشن اصلی هست

Schema::create('f101_s',
            $table->bigIncrements('id');
            $table->integer('tashakol_id');
            $table->foreign('tashakol_id')->references('id')->on('tashakols')->onDelete('cascade');
            $table->string('subject');
            $table->string('title');
            $table->string('target');
            $table->string('necessity');
            $table->string('audience');
            $table->string('colleague');
            $table->string('date');
            $table->integer('from');
            $table->integer('to');
            $table->integer('term');
            $table->text('preRun');
            $table->text('duringRun');
            $table->text('laterRun');
            $table->text('manPower');
            $table->string('documentaryOfficer');
            $table->string('assessment');
            $table->string('assessmentOfficer');
            $table->integer('status')->default('0');
            $table->text('comment')->nullable();
            $table->timestamps();
        });

این یکی از مایگریشن هایی هست که با کلید خارجی به جدول بالایی ارتباط داره:

Schema::create('costlies', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->integer('number');
            $table->string('unit_price');
            $table->string('credit');
            $table->string('place');
            $table->integer('f101_id');
            $table->foreign('f101_id')->references('id')->on('f101_s')->onDelete('cascade');
            $table->timestamps();
        });

و این هم مدل و روابط اون جدول اصلیه هست:

public function users()
    {
        return $this->hasOne(User::class , 'tashakol_id');
    }

    public function tashakol()
    {
        return $this->belongsTo(Tashakol::class, 'tashakol_id');
    }

    public function free()
    {
        return $this->hasMany(Free::class, 'f101_id');
    }
    public function costly()
    {
        return $this->hasMany(Costly::class, 'f101_id');
    }
    public function ads()
    {
        return $this->hasMany(Ads::class, 'f101_id');
    }

@saleh.hesfandiari
@hesammousavi


Saleh330
@saleh.hesfandiari 5 سال پیش مطرح شد
1

شما احتمالاً دارید از لاراول 5.8 استفاده میکنید توی لاراول 5.8 وقتی که references شما bigIncrements هست حتماً باید کلید خارجیتون هم bigInteger باشه. یعنی باید type این دوتا با هم یکی باشه.
الآن باید type ستون های tashakol_id و f101_id داخل دیتا بیستون bigInteger باشه.
این کار رو بکنید ببینیم مشکل حل میشه یا نه.


asani
تخصص : کارشناس فنی
@ali.asani 5 سال پیش مطرح شد
0

ممنونم قبلا همین راه رو بر اساس مستندات لاراول تست کرده بودم جواب نگرفته بودم-ممنون از بذل توجه شما


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

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