راکت

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

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()
ثبت پرسش جدید

پاسخ‌ها

4
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

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

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

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

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

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@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

تخصص: دانشجوی برنامه نویسی :)

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

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

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

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

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

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

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