سلام، وقتتون بخیر
توی سایتم چند تا بخش دارم؛ بخش فیلم، بخش موزیک، بخش مطلب و ...
حالا به تبعیت از وردپرس اومدم و برای هر بخش یک دسته بندی جدا در نظر گرفتم(بخش مطالب دسته بندی های خودش، بخش موزیک دسته بندی خودش و ...).
الان من یک جدول posts دارم به این شکل که کد مایگریشن اون:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug')->unique();
$table->longText('desc');
$table->longText('content');
$table->string('banner');
$table->integer('views')->default('0');
$table->timestamps();
});
}
یک جدول category_post دارم برای ذخیره دسته بندیهای مربوط به جدول posts یا همون مطالبم:
public function up()
{
Schema::create('category_posts', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('slug')->unique();
$table->unsignedBigInteger('category_id')->nullable();
$table->foreign('category_id')
->references('id')
->on('category_posts')
->onUpdate('CASCADE')
->onDelete('CASCADE');
$table->timestamps();
});
}
تا اینجا که مشکلی نیست، میام دسته بندی ها رو ذخیره میکنم و تو صفحه افزودن مطلب میام نشونشون میدم که کاربر بتونه انتخاب کنه دسته بندی مورد نظرش رو، به این شکل:
![ تصویر][1]
[1]:
https://static.roocket.ir/images/editor/2022/12/2/1YA4He2xfmQioF299e0mE1aXOD7jnMUXMHCscTlv.png
حالا یه جدول دیگه میخوام درست کنم که توی این جدول post_id و category_id رو ذخیره کنم؛ الان هر چی تلاش میکنم و کدهای مختلف رو تست میکنم اصلا به نتیجه نمیرسم،
اومدم یک مایگریشن جدید ایجاد کردم به اسم category_posts_details که کدهای زیر رو داخلش قرار دادم:
public function up()
{
Schema::create('category_posts_details', function (Blueprint $table) {
$table->id();
$table->foreignId('category_id')
->constrained()
->onUpdate('CASCADE')
->onDelete('CASCADE');
$table->foreignId('post_id')
->constrained()
->onUpdate('CASCADE')
->onDelete('CASCADE');
$table->timestamps();
});
}
حالا موقع اجرا کردن مایگریشن خطای زیر رو میگیرم:
SQLSTATE[HY000]: General error: 1005 Can't create table `kids`.`category_posts_details` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `category_posts_det
ails` add constraint `category_posts_details_category_id_foreign` foreign key (`category_id`) references `categories` (`id`) on delete CASCADE on update CASCADE)
نمیدونم اسم جدول رو دارم اشتباه وارد میکنم یا کلا کدهام اشتباهه ...
اینم کدهای فانکشن store کنترلر Post:
public function store(CreatePostRequest $request)
{
$file = $request->file('banner');
$file_name = $file->getClientOriginalName();
$file->storeAs('images/banners', $file_name, 'public_files');
$data = $request->validated();
$data['banner'] = $file_name;
Post::create($data);
session()->flash('status', 'مطلب جدید ایجاد شد');
return redirect()->route('posts.index');
}
ممنون میشم یه راهنمایی کنید
با تشکر
@tamiratsg
سلام
وارد پوشه config شوید و فایل database.php رو باز کنید و مقدار engine در mysql رو برابر با InnoDB قرار بدین
این مقدار به صورت پیشفرض myISAM است که از کلیدهای خارجی پشتیبانی نمیکند.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟