با سلام
هنگام ذخیره مطلب با خطای 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();
});
}
سلام دوست عزیز
من مشکلتون رو متوجه شدم ببینید برید توی phpmyadmin و دیتابیس رو چک کنید جدول articles ایدی رو چک کنید ببینید auto increment فعال هست یا نه یا اگه نمیدونید یک اسکرین شات بگیرید بفرستید ولی کنارش باید یه دونه کلید زرد رنگ باشه کنار ایدی اگه اون باشه که هیچی مشکل از کد نویسیه اما اگه نباشه یعنی ایدی جدول articles به صورت خودکار نمیاد بهش اضافه بشه و پر بشه واسه همین اینجا فیلد ایدی رو تعریف نکردی بهت اررور داد که نمیتونی ایدی رو 0 بزاری مگر اینه رفته باشه و کد های لاراول رو دست کاری کرده باشه و اون قسمتی که گفته
$table->id();
رفتی و کد هاشو تغییر دادی و auto increment رو ازش ورداشتی چون ایدی توی مایگریشن ها به صورت پیشفرض قرار داره و auto increment هم براش فعاله
خوب ببین توی این قسمت چه request هایی میفرستی میشه ببینم؟
$article=$article->create($request->all());
اگه میشه یه dd بگیر قبلش ببینم
به اینصورت dd میزارم بعد از همون دستور ولی بازم همون خطا رو میده
$article=new Article;
// try{
$article = $article->create($request->all());
dd($request);
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"
]
تو باید برای ایجاد article این موارد بدی به create :
'name','slug','description','user_id','status'
فقط این موارد قرار بده توی create
درود خوبی...
توی مدل article این کد وارد کنید.
به جای $attributes عبارت $appends جایگزین کنید:
protected $appends = [ 'status' , 'hit=>1'];
من خودم نمونه پروژه وبلاگ با لاراول نوشتم...
یه سر به کدهای مدل و کنترلر بزن:
https://github.com/OrchidDev/Blog
دوست عزیز توی کد نویسی ظاهرا مشکلی نیست یک بار با دستور php artisan migrate:fresh مایگریشن هارو از نو بساز اگه باز نشد حالا اگه خواستی با برنامه anydesk وصل میشم و یه سری تست ها انجام میدم تا مشکل رو پیدا کنم و برطرف کنم ممکنه مشکل از جای دیگه باشه تا تست نویسی انجام نشه شاید مشخص نشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟