راکت

خطای 42S22 هنگام ذخیره مطلب

13 پاسخ

با سلام
هنگام ذخیره مطلب با خطای 42s22 مواجه میشم
لاراول 10 کار میکنم و یک جدول pvot دارم که همزمان می خوام هم مطلب ذخیره بشه و هم اطلاعات در جدول pvot
ممنون میشم راهنمایی کنید
 تصویر
کد کنترلر

public function create()
    {
        $categories= category::all()->pluck("name","id");
        $page_title="فرم ایجاد مطلب";
        return view('back.articles.create', compact("page_title","categories"));
    }
    public function store(Request $request)
    {
        $messages= [
            'name.required' => 'لطفاً نام مطلب را وارد نمایید' ,
            'slug.required' =>'لطفاً نام مستعار مطلب را وارد نمایید'  ,
            'slug.unique' => 'نام مستعار مطلب تکراری است' ,
            'description.required' => 'لطفاً محتوای مطلب را وارد نمایید' ,
            'status.required' => 'لطفاً وضعیت مطلب را وارد نمایید' ,
        ];
        $validated = $request->validate([
            'name' => 'required',
            'slug' => 'required|unique:categories' ,
            'description' => 'required' ,
            'status' => 'required'
        ] , $messages);
        $article=new Article;
        try{
            $article=$article->create($request->all());
            $article->categories()->attach($request->categories);
        }catch(Exception $exception){
            return redirect(route('admin.articles.create')) -> with('warning' , $exception->getCode());
        }

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

کد مادل های article , category

class category extends Model
{
    use HasFactory;
    protected $fillable=['name','slug'];
    public function atricles()
    {
        return $this->belongsToMany(Article::class );
    }
}
class Article extends Model
{
    use HasFactory;
    protected $fillable=['name','slug','description','user_id','status'];
    protected $attributes=['hit=>1'];
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
}

کد جدول

public function up(): void  
{  
Schema::create('articles', function (Blueprint $table) {

        $table->id();
        $table->string('name');
        $table->string('slug')->unique();
        $table->text('description');
        $table->integer('user_id');
        $table->integer('hit');
        $table->tinyInteger('status');
        $table->timestamps();
    });
}
امین
امین
@safaeiiam
ثبت پرسش جدید

پاسخ‌ها

13
میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

سلام دوست عزیز
من مشکلتون رو متوجه شدم ببینید برید توی phpmyadmin و دیتابیس رو چک کنید جدول articles ایدی رو چک کنید ببینید auto increment فعال هست یا نه یا اگه نمیدونید یک اسکرین شات بگیرید بفرستید ولی کنارش باید یه دونه کلید زرد رنگ باشه کنار ایدی اگه اون باشه که هیچی مشکل از کد نویسیه اما اگه نباشه یعنی ایدی جدول articles به صورت خودکار نمیاد بهش اضافه بشه و پر بشه واسه همین اینجا فیلد ایدی رو تعریف نکردی بهت اررور داد که نمیتونی ایدی رو 0 بزاری مگر اینه رفته باشه و کد های لاراول رو دست کاری کرده باشه و اون قسمتی که گفته

$table->id();

رفتی و کد هاشو تغییر دادی و auto increment رو ازش ورداشتی چون ایدی توی مایگریشن ها به صورت پیشفرض قرار داره و auto increment هم براش فعاله

امین
امین
@safaeiiam

سلام
اینارو چک کردم قبلاً
مشکل از کد هستش

 تصویر

شاید پاسخ شما همین‌جا باشد

میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

خوب ببین توی این قسمت چه request هایی میفرستی میشه ببینم؟

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

اگه میشه یه dd بگیر قبلش ببینم

امین
امین
@safaeiiam

به اینصورت dd میزارم بعد از همون دستور ولی بازم همون خطا رو میده

$article=new Article;
        // try{
            $article = $article->create($request->all());
            dd($request);
امین
امین
@safaeiiam

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

میلاد قربانی
میلاد قربانی
@miladghorbani006

تخصص: php laravel

dd بالای ایجاد article بذارید و نتیجه بفرستید

dd($request->all());
امین
امین
@safaeiiam
array:7 [▼ // app\Http\Controllers\back\ArticleController.php:42
  "_token" => "P0HKu4hONE875iP2JTP3SjvYFgrR3YF9hCcvCm9k"
  "name" => "مطلب1"
  "slug" => "001"
  "description" => "مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1مطلب1 ▶"
  "status" => "1"
  "categories" => array:1 [▼
    0 => "4"
  ]
  "user_id" => "1"
]
میلاد قربانی
میلاد قربانی
@miladghorbani006

تخصص: php laravel

تو باید برای ایجاد article این موارد بدی به create :

'name','slug','description','user_id','status'

فقط این موارد قرار بده توی create

امین
امین
@safaeiiam

به هر شکلی میزنم همون مشکل رو میگیره

میشه لطفاً خط دستورشو کامل بگین
شاید اشتباه میزنم

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

درود خوبی...
توی مدل article این کد وارد کنید.
به جای $attributes عبارت $appends جایگزین کنید:

protected $appends = [ 'status' , 'hit=>1'];
امین
امین
@safaeiiam

سلام
ممنون
حل نشد

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

من خودم نمونه پروژه وبلاگ با لاراول نوشتم...
یه سر به کدهای مدل و کنترلر بزن:
https://github.com/OrchidDev/Blog

میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

دوست عزیز توی کد نویسی ظاهرا مشکلی نیست یک بار با دستور php artisan migrate:fresh مایگریشن هارو از نو بساز اگه باز نشد حالا اگه خواستی با برنامه anydesk وصل میشم و یه سری تست ها انجام میدم تا مشکل رو پیدا کنم و برطرف کنم ممکنه مشکل از جای دیگه باشه تا تست نویسی انجام نشه شاید مشخص نشه

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

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