farshadms
4 سال پیش توسط farshadms مطرح شد
4 پاسخ

مشکل در دستور php artisan migrate

 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.

@hesammousavi
@milad
@hosseinshirinegad98


ثبت پرسش جدید
کیان لطیفی
تخصص : برنامه نویس وب
@kianlatifi 4 سال پیش آپدیت شد
0

@farshadm9979
احتمالا در تعریف کلید خارجی اشتباه شده. لطفا کد migration مربوطه رو بفرستید. (migration جدول articles)


نیما - ش
تخصص : برنامه نویس وب
@nimageneral 4 سال پیش مطرح شد
0

بهتر بود کدی رو که نوشتید میفرستادید ، این خطا مربوط به تعریف کردن اشتباه کلید خارجی هست.


حسین افتخارراد
تخصص : نال کد
@hosseinradvictor 4 سال پیش مطرح شد
0

با درود
این مشکل زمانی زخ میدهد که جدولی هنوز ساخته نشده و شما از ان کلید جانبی گرفته اید درست مثل این کد که جدول 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();
});
    }

با این روش میتوانید برای تمام جداول کلید ها را بدون هیچ مشکلی اعمال کرد
با تشکر حسین افتخارراد


جم احسا
تخصص : برنامه نویس
@Gemehsa 2 سال پیش مطرح شد
0

سلام و عرض ادب
دوستان احتمالا این مشکل برای خیلی ها پیش اومده که با این ارور مواجه بشن مشکل از این جاست که شما حتما باید برای نام جدولی که می خواین رابطه خارجی بسازید تایپش رو از نوع 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');

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

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