Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`articles` (errno: 150 "Foreign key constraint is incorr
ectly formed") (SQL: alter table `articles` add constraint `articles_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)
at C:\Users\Poya\Desktop\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|
Exception trace:
1 PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`articles` (errno: 150 "Foreign key constraint is incorrectly formed")")
C:\Users\Poya\Desktop\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458
2 PDOStatement::execute()
C:\Users\Poya\Desktop\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458
Please use the argument -v to see more details.
@farshadm9979
احتمالا در تعریف کلید خارجی اشتباه شده. لطفا کد migration مربوطه رو بفرستید. (migration جدول articles)
بهتر بود کدی رو که نوشتید میفرستادید ، این خطا مربوط به تعریف کردن اشتباه کلید خارجی هست.
با درود
این مشکل زمانی زخ میدهد که جدولی هنوز ساخته نشده و شما از ان کلید جانبی گرفته اید درست مثل این کد که جدول articles هنوز ساخته نشده و شما از آن کلید خارجی گرفته اید
باید توچه داشته باشید که دستور migrate به ترتیب از بالا به پایین شروع به اجرا مایگریشن ها میکند پس مایگریشنی که شما در ان کلید خارجی جدول articles را استفاده کرده اید بالا تر از مایگریشن جدول articles است
روشی که به شخصه استفاده میکنم ابتدا تمایی مایگریشن ها را بدون کلید خارجی ایجاد میکنم و در اخر با دستور
php artisan make:migration add_foreignkey_to_all_table
یک مایگریشن ساخته و تمامی کلید های خارجی را در آن تعریف میکنم مانند مثال
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')->constrained();
});
}
با این روش میتوانید برای تمام جداول کلید ها را بدون هیچ مشکلی اعمال کرد
با تشکر حسین افتخارراد
سلام و عرض ادب
دوستان احتمالا این مشکل برای خیلی ها پیش اومده که با این ارور مواجه بشن مشکل از این جاست که شما حتما باید برای نام جدولی که می خواین رابطه خارجی بسازید تایپش رو از نوع foreignId در نظر بگیرید. تو مثال پایین اگر برای ستون جدول article بخوایم کلید خارجی به جدول users بزنیم قبل ('user_id') نباید مقادیر دیگر قرار گیرد و مقدار integer اشتباه است .
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
و فقط می تواند foreignId قرار گیرد وگرنه به ارور برمی خورید. مثال نمونه درست .
$table->foreignId('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟