سلام موقع ساختن دیتابیس این خطا نمایش میده ولی جداول ساخته شد
دلیلش چیه؟
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()
در متن ارور علتش رو دقیقا ذکر کرده:
در فایل 20200713072903createproductstable و قسمتی که میخواد foreign_key برای فیلد category_id ایجاد کنه دچار مشکل میشه. علتش هم به احتمال خیلی زیاد بر میگرده به نحوه تعریف این فیلد.
دقت کنید که بجای integer باید از دستور unsignedInteger برای این فیلد استفاده کنید. یعنی مثلا اینجوری:
$table->unsignedInteger('category_id ')->nullable();
اگر تغییر بالا رو اعمال کردید و باز هم اوکی نشد علتش عدم هم خونی نوع id در جدول cateogires با فیلد category_id در جدول products هست. اگر از نوع bigIncrements هست به increments تغییرش بدید و مجدد امتحان کنید.
@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();
});
@wxyz
سلام.
اینجا موقع ایجاد کلید خارجی اسم جدول رفرنس رو مفرد نوشتید . جدول شما categories
هست شما category
نوشتین.
اینطوری صحیح هست:
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
فک میکنم با این مورد حل بشه مشکلتون . موفق باشید
@wxyz
دوست عزیز؛
باید در تایپ کدهاتون دقت بیشتری بخرج بدید. علت اینکه جدول category هاتون ساخته نمیشه احتمالا بدلیل این هست که برای id نوع Increments قرار دادید. در حالیکه حرف i در ابتداش باید کوچک باشه و نه بزرگ!
برای ایجاد کلید خارجی category_id در جدول products هم همون طوری که جناب آقای دادخواه @SobhanDadkhah اشاره کردند، اسم جدول رو بجای cateogories نوشتید category!
اگر متن خطا ها رو هم با دقت بیشتری مطالعه کنید اغلب اوقات علتش رو خودش صریحا داره میگه بنده خدا.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟