محمد میرزاخانی
3 سال پیش توسط محمد میرزاخانی مطرح شد
7 پاسخ

مشکل در جدولpvot موقعcreate کردن اطلاعات

سلام وقتی من با متد استور اطلاعات راcreate میکنم به خطای زیر میخورم
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'article_id' in 'field list' (SQL: insert into article_category (article_id, category_id) values (3, 1))
اینم متد استورم
public function store(Request $request)
{
$messages = [
'name.required' => 'فیلد نام را وارد نمایید',
'slug.required' => 'نام مستعار دسته بندی را وارد نمایید',
'slug.unique' => 'فیلد نام مستعار تکراری است.عنوان را عوض کنید',
'user_id.unique'=>'فیلد نام را وارد نمایید'
];
$validatedData = $request->validate([
'name' => 'required',
'slug' => 'required|unique:articles,slug,',
'user_id' => 'required',

    ], $messages);
    $article = new Article;

    $article = $article->create($request->all());
    $article->categories()->attach($request->categories);

    $msg = "ذخیره ی دسته بندی جدید با موفقیت انجام شد";
    return redirect(route('admin.articles'))->with('success', $msg);
}

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

بله اشتباه تایپی دارید در کد ارسالیتون از migration! 😐

 Schema::create('article_category', function (Blueprint $table) {
    $table->id();
    $table->integer('article-id');
    //باید بشه:
    $table->integer('article_id');
    $table->integer('category_id');
});

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

لاراول بر اساس نام گذاری ها و متدهای Relation شما می‌گرده دنبال جدول ها و فیلدهایی که با یک پترن مشخص باید وجود داشته باشند.

مثلا اگر رابطه بین Article و Category تون رو از نوع Many-to-Many در نظر گرفته اید (که منطقا هم باید همین طور باشه):

  • اولا باید یک جدول واسط داشته باشید با نام article_category
  • ثانیا این جدول باید حداقل دو تا ستون داشته باشه با عناوین article_id و category_id

حالا با این توضیحات، ارور شما به صورت مشخص داره میگه:

SQLSTATE[۴۲S۲۲]: Column not found: ۱۰۵۴ Unknown column 'article_id' in 'field list' (SQL: insert into article_category (article_id, category_id) values (۳, ۱)

یعنی در جدول articlecategory ستونی با عنوان articleid پیدا نکردم! بررسی کنید علتش چیه و اصلاحات رو اعمال کنید.

پی‌نوشت: چنانچه به هر دلیلی قصد تبعیت از الگوهای نام گذاری پیش فرض لاراول رو نداشتید هم مشکلی نیست. تنها کافیه موقع تعریف متد Relation مربوطه در مدل ها اسم جدول و فیلدهای کاستوم خودتون رو هم بهش بدید تا از این به بعد با اون عناوین سراغ دیتابیس بره و دنبالشون بگرده...
مثلا:

return $this->belongsToMany(Article::class, 'article_category', 'category_id', 'article_id');

محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

@mhyeganeh
من همه این هایی که گفتین را رعایت کردم هم جدول واسط و هم درونش دو تا ستونهcategory_id و article_id قرار دادم اما مشکل داره
public function articles(){
return $this->belongsToMany(Article::class);
}


محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

کسی نیست راهنمایی کنه؟؟


امیر حسین شکوهی
تخصص : web developer
@amirshokoohi 3 سال پیش مطرح شد
0

@mirzamohammad.com
جدول واسط رو چک کنید ، میگه ستون article_id رو پیدا نمیکنه


محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

این جدول واسط
جاییش اشتباهه؟؟
" Schema::create('article_category', function (Blueprint $table) {
$table->id();
$table->integer('article-id');
$table->integer('category_id');

    });"

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

بله اشتباه تایپی دارید در کد ارسالیتون از migration! 😐

 Schema::create('article_category', function (Blueprint $table) {
    $table->id();
    $table->integer('article-id');
    //باید بشه:
    $table->integer('article_id');
    $table->integer('category_id');
});

محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
1

ممنون بابت وقتی که گذاشتید
@mhyeganeh
@amirshokoohi64


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

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