شیوا مولودی
4 سال پیش توسط شیوا مولودی مطرح شد
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
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


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

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


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

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


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

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
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.moulodi 4 سال پیش مطرح شد
0

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


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

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

$table->id();

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
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();

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

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