سلام وقتتون بخیر باشه
من یک پروژه در لاراول 8.83 انجام میدم،و به تمام کلید های خارجی گیر میده و هیچ مایگریتی انجام نمیشه،می خواستم ببینم کجای کار مشکل داره.
از
$table->foreignId('user_id')->constrained();
استفاده کردم،ولی جواب نگرفتم.
ممنون میشم اگر راهنماییم کنین.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('last_name');
$table->string('national_code');
$table->string('phone');
$table->string('birthday');
$table->tinyInteger('gender');
$table->string('bank_number');
$table->unsignedInteger('province_id');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
$table->rememberToken();
$table->timestamps();
});
}
public function up()
{
Schema::create('provinces', function (Blueprint $table) {
$table->id();
$table->string('province');
$table->string('city');
$table->boolean('active');
$table->timestamps();
});
}
SQLSTATE[HY000]: General error: 1005 Can't create table `kliniketo_db`.`#sql-74b8_d3` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `users` add constraint `users_province_id_foreign` foreign key (`province_id`) references `provinces` (`id`) on delete cascade)
at D:\xampp\htdocs\kliniketo-website\vendor\laravel\framework\src\Illuminate\Database\Connection.php:712
708▕ // If an exception occurs when attempting to run a query, we'll format the error
709▕ // message to include the bindings with SQL, which will make this exception a
710▕ // lot more helpful to the developer instead of just the database's errors.
711▕ catch (Exception $e) {
➜ 712▕ throw new QueryException(
713▕ $query, $this->prepareBindings($bindings), $e
714▕ );
715▕ }
716▕ }
سلام امیدوارم حال شما خوب باشه. خطایی که مشاهده می کنید به دلیل کلیدی به اسم province_id
هست که از نوع unsignedInteger
تعریف شده است. برای حل این مشکل باید دوتا نکته رو در نظر داشته باشید:
۱) وقتی شما از دستور table->id
به هنگام ساخت جدول provinces استفاده می کنید. یک فیلد از نوع BIG INTEGER
برای شما ساخته می شود.
۲) وقتی میخواهید یک ریلیشن برای جدول provinces در جدول users بنویسید باید حتما به جای دستور unsignedInteger
از دستور unsignedBigInteger
استفاده کنید.
با توجه به نکات بالا لطفا خط زیر را :
$table->unsignedInteger('province_id');
به خط زیر تغییر بدهید:
$table->unsignedBigInteger('province_id');
سلام مجدد
سپاس از پاسختون
این کار رو هم انجام دادم ولی متاسفانه باز همون خطا رو میده، در دیتابیس ذخیره میشه اما کلید خارجی رو بوجود نمی یاره
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('last_name');
$table->string('national_code');
$table->string('phone');
$table->string('birthday');
$table->tinyInteger('gender');
$table->string('bank_number');
$table->unsignedBigInteger('province_id');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
$table->rememberToken();
$table->timestamps();
});
}
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1005 Can't create table `kliniketo_db`.`#sql-74b8_675` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `users` add constraint `users_province_id_foreign` foreign key (`province_id`) references `provinces` (`id`) on delete cascade)
at D:\xampp\htdocs\kliniketo-website\vendor\laravel\framework\src\Illuminate\Database\Connection.php:712
708▕ // If an exception occurs when attempting to run a query, we'll format the error
709▕ // message to include the bindings with SQL, which will make this exception a
710▕ // lot more helpful to the developer instead of just the database's errors.
711▕ catch (Exception $e) {
➜ 712▕ throw new QueryException(
713▕ $query, $this->prepareBindings($bindings), $e
714▕ );
715▕ }
716▕ }
من نمی دونم کاری که کردم درست و اصولی هست یا نه ، اما مایگریشن هایی که از کلید خاریجیشون ایراد میگرفت حذف کردم و از طریق تیبل واسط کلید خارجیشون رو ایجاد کردم،اما نمی دونم کار درستی کردم یا نه.
public function up()
{
Schema::create('AddProvinceUserTable', function (Blueprint $table) {
$table->unsignedBigInteger('province_id');
$table->foreign('province_id')->references('id')->on('provinces');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
}
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.