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

خطا در ساخت دیتابیس

سلام موقع ساختن دیتابیس این خطا نمایش میده ولی جداول ساخته شد
دلیلش چیه؟


C:\xampp\htdocs\laraveshop>php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.22 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.16 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.13 seconds)
Migrating: 2020_07_13_072635_create_categories_table
Migrated:  2020_07_13_072635_create_categories_table (0.42 seconds)
Migrating: 2020_07_13_072903_create_products_table

   Illuminate\Database\QueryException

  SQLSTATE[HY000]: General error: 1005 Can't create table `laravelshop`.`products` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `products` add constraint `products_category_id_foreign` foreign
key (`category_id`) references `category` (`id`) on delete cascade)

  at C:\xampp\htdocs\laraveshop\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675|

  1   C:\xampp\htdocs\laraveshop\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `laravelshop`.`products` (errno: 150 "Foreign key constraint is incorrectly formed")")

  2   C:\xampp\htdocs\laraveshop\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOStatement::execute()

ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
3

در متن ارور علتش رو دقیقا ذکر کرده:

در فایل 20200713072903createproductstable و قسمتی که میخواد foreign_key برای فیلد category_id ایجاد کنه دچار مشکل میشه. علتش هم به احتمال خیلی زیاد بر میگرده به نحوه تعریف این فیلد.

دقت کنید که بجای integer باید از دستور unsignedInteger برای این فیلد استفاده کنید. یعنی مثلا اینجوری:

$table->unsignedInteger('category_id ')->nullable();

اگر تغییر بالا رو اعمال کردید و باز هم اوکی نشد علتش عدم هم خونی نوع id در جدول cateogires با فیلد category_id در جدول products هست. اگر از نوع bigIncrements هست به increments تغییرش بدید و مجدد امتحان کنید.


Paradox
تخصص : در حال یادگیری
@paradox 4 سال پیش آپدیت شد
0

@mhyeganeh
خیلی ممنون هر دو رو روشی که گفتید تست کردم باز همین مشکل هست دیگه جدول کتگوری هم ساخته نمیشه و ارور هست


        Schema::create('products', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedInteger('category_id')->nullable();
            $table->foreign('category_id')->references('id')->on('category')->onDelete('cascade');
            $table->string('name');
            $table->string('slug')->unique();
            $table->text('description');
            $table->double('price');
            $table->string('image');
            $table->integer('user_id');
            $table->integer('hit');
            $table->tinyInteger('status');
            $table->timestamps();
        });
    Schema::create('categories', function (Blueprint $table) {
            $table->Increments('id');
            $table->string('title');
            $table->string('slug')->unique();
            $table->text('name');
            $table->timestamps();
        });

سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش آپدیت شد
0

@wxyz
سلام.
اینجا موقع ایجاد کلید خارجی اسم جدول رفرنس رو مفرد نوشتید . جدول شما categories هست شما category نوشتین.
اینطوری صحیح هست:

$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

فک میکنم با این مورد حل بشه مشکلتون . موفق باشید


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
1

@wxyz
دوست عزیز؛
باید در تایپ کدهاتون دقت بیشتری بخرج بدید. علت اینکه جدول category هاتون ساخته نمیشه احتمالا بدلیل این هست که برای id نوع Increments قرار دادید. در حالیکه حرف i در ابتداش باید کوچک باشه و نه بزرگ!

برای ایجاد کلید خارجی category_id در جدول products هم همون طوری که جناب آقای دادخواه @SobhanDadkhah اشاره کردند، اسم جدول رو بجای cateogories نوشتید category!

اگر متن خطا ها رو هم با دقت بیشتری مطالعه کنید اغلب اوقات علتش رو خودش صریحا داره میگه بنده خدا.


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

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