راکت
شیوا مولودی
شیوا مولودی
5 سال پیش توسط شیوا مولودی مطرح شد
8 پاسخ

foreign key

سلام دوستان
میخوام بین دو جدول users و booksی که دارم relationship برقرار کنم
و مایگریشن booksم رو به این شیوه تعریف کردم:

 public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->integer('id');
            $table->string('name');
            $table->unsignedInteger('user_id');
            $table->integer('pages');
            $table->string('ISBN');
            $table->integer('price');
            $table->date('published_at');
            $table->timestamps();

            $table
                ->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade')
                ->onUpdate('cascade');
        });
    }

ولی موقعی که میخوام مایگریتش کنم این ارور رو میده :
General error: 1005 Can't create table book.books (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table books add constraint books_user_id_foreign foreign key (user_id) references users (id) on delete cascade on update cascade)
اگ این قسمت کد رو ولی پاک کنم خطاش برطرف میشه چرا؟

->onDelete('cascade')->onUpdate('cascade')

ثبت پرسش جدید
حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

ترتیب اجرای مایگریشن ها مهم هست ابتدا باید جدول یوزر مایگریت بشه به دنبال اون جدول کتاب ها مایگریت باشه .و همین طور باید دقت کنید که نوع فیلد آدی در جدول یوزر چه نوعی است و همون نوع رو در جدول کتاب ها برای فیلد user_id در نظر بگیرید


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

از unsignedBigInteger استفاده کن برای user_id


Ali_Dev
Ali_Dev
تخصص :برنامه نویس
@ali.akhi.19985 سال پیشمطرح شد
-1

از unsignedBigInteger استفاده کن برای user_id


شیوا مولودی
شیوا مولودی
@shiva.moulodi5 سال پیشمطرح شد
0

@ali.akhi.1998
@ali.bayat
@hosseinshirinegad98
مرسی از پاسخاتون ولی هم با unsignedBigInteger امتحان کردم و هم اینکه اول مایگریشن یوزر و پسوردی که خودش داررو اجرا میکنم و بعد books رو ولی همینه باز☹


حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

برای من با موفقیت مایگریت شد البته ابتدا همون خطای شما رو میداد و لی با این کد درست شد. این کدو در مایگریشن books قرار بدین و اجرا کنید.

$table->id('id');
$table->string('name');
$table->unsignedBigInteger('user_id');
$table->integer('pages');
$table->string('ISBN');
$table->integer('price');
$table->date('published_at');
$table->timestamps();

$table
->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');

فیلد id رو در هر دو جدول users , books به صورت

$table->id('id');

تعریف کنید همون روشی که فریم ورک پیشنهاد کرده.


شیوا مولودی
شیوا مولودی
@shiva.moulodi5 سال پیشمطرح شد
0

@hosseinshirinegad98
فرقی نکرد متاسفانه


حسین شیری نژاد
حسین شیری نژاد
تخصص :programmer
@hosseinshirinegad985 سال پیشمطرح شد
0

اشتباه شده اون فیلد id رو به این صورت باید بنویسید

$table->id();

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

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


$table->id();
$table->string('name');
$table->foreignId('user_id')->constrained()->onDelete('cascade)->onUpdate('cascade');
$table->integer('pages');
$table->string('ISBN');
$table->integer('price');
$table->date('published_at');
$table->timestamps();

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

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