سلام دوستان
میخوام بین دو جدول 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')
ترتیب اجرای مایگریشن ها مهم هست ابتدا باید جدول یوزر مایگریت بشه به دنبال اون جدول کتاب ها مایگریت باشه .و همین طور باید دقت کنید که نوع فیلد آدی در جدول یوزر چه نوعی است و همون نوع رو در جدول کتاب ها برای فیلد user_id در نظر بگیرید
@ali.akhi.1998
@ali.bayat
@hosseinshirinegad98
مرسی از پاسخاتون ولی هم با unsignedBigInteger امتحان کردم و هم اینکه اول مایگریشن یوزر و پسوردی که خودش داررو اجرا میکنم و بعد books رو ولی همینه باز☹
برای من با موفقیت مایگریت شد البته ابتدا همون خطای شما رو میداد و لی با این کد درست شد. این کدو در مایگریشن 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');
تعریف کنید همون روشی که فریم ورک پیشنهاد کرده.
اگر از نسخه ۷ به بالا استفاده میکنی میتونی به شکل زیر هم انجام بدی
$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();
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟