سلام دوستان
میخوام بین دو جدول 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')شاید پاسخ شما همینجا باشد
@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');
تعریف کنید همون روشی که فریم ورک پیشنهاد کرده.
@hosseinshirinegad98
فرقی نکرد متاسفانه
اگر از نسخه ۷ به بالا استفاده میکنی میتونی به شکل زیر هم انجام بدی
$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();