💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ حامد قاسمی
علت نال بودن post_id
جامعه لاراول ایجاد شده در ۲۹ فروردین ۱۴۰۳

سلام متاسفانه هرکار میکنم post_id توی دیتابیس نال ثبت میشه و به تبعش به کاربر هم نمایش داده نمیشه واگر توی دیتابیس دستی واردش کنم به کاربر نشونش میده

 ممنون میشم بررسی بفرمایید بشدت گیرم

https://github.com/hamedghasemi9877/initial.git

خدمت شما

درود حامد عزیز کدتون رو چک کردم 

 

یک سری ایرادات دیگه ای هم توی کدتون مشاهده کردم که فعلا توی مرحله اموزش از اون‌ها صرف نظر میکنیم

 

شما به جای استفاده از facade خود request میتونید به این روشی که من براتون قرار میدم استفاده کنید 

 

تا بتونید به اینپوت‌های فرم تون هم دسترسی پیدا کنید 

 

البته بگم با روش شما هم ممکنه بشه باید چک بکنید ببینید چرا این روش نمیشه ولی بهتره در متد از از خود request$ استفاده بکنید که در ادامه براتون قرار میدم 

 

   public function store(Post $post,Request $request)
    {
        Comment::create([
            "user_id" => auth()->user()->id,
            "post_id" => $post->id,
            "body" => $request->body,
        ]);
        return redirect('/profile')->with('message', 'Your command has been executed!');
    }

 

موردی بود حتما بفرمایید

موفق باشید

محمدرسول اصغری ۲۹ فروردین ۱۴۰۳، ۱۶:۱۱

سلام ممنونم متاسفانه توی متد استور، dd که میگیرم بازهم ارور رو مبده

 

متن ارور:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null

INSERT INTO
  `comments` (
    `user_id`,
    `post_id`,
    `body`,
    `updated_at`,
    `created_at`
  )
VALUES
  (1, ?, aaaa, 2024 -04 -18 07: 18: 47, 2024 -04 -18 07: 18: 47
حامد قاسمی ۳۰ فروردین ۱۴۰۳، ۰۷:۱۹

خب ببینید شما چند تا جا رو دارید اشتباه انجام میدید

شما توی متد store دارید یه پارامتر (Post $post)رو میگیرید  و باید حتما جایی که دارید از این روت تون استفاده میکنید این پارامتر رو هم پاس بدید 

و به همین ترتیب توی جایی که دارید روت تون رو تعریف میکنید باید این پارامتر رو قرار بدید تا لاراول بتونه متوجه بشه این روت نیازمنده یه پارامتر هست 

به این شکل :

Route::post('comments/store/{post}', [CommentController::class, 'store'])
->name('comment.store');

 

ور در جایی هم که میخواید از این روت توی فرم تون استفاده کنید باید ایدی Post تون رو هم پاس بدید تا بتونید توی متد به Post دسترسی داشته باید (route model binding) به این شکل :

<form method="post" action="{{route('comment.store',$post->id)}}">
                        <div class="form-group">
                            @csrf
                        <div class="form-group">
  <textarea name="body" rows="10" cols="30" placeholder="..."class="form-control" ></textarea>
                        </div>
                        <div class="form-group">
                            <input type="submit" class="btn btn-success" />
                        </div>
                    </form>

 

و توی متد تون هم به این ترتیب میتونید بهشون دسترسی داشته باشید 

    public function store(Request $request,Post $post)
    {
        Comment::create([
         "user_id" => auth()->user()->id,
         "post_id" => $post->id,
         "body" => request("body") 
       ]);
        return redirect('/profile')->with('message','Your command has been executed!');
    }

 

با انجام دادن این مراحل مشکلتون برطرف میشه 

فقط توجه کنید جاهایی که دارید مقداری رو پاس میدید مثل توی فرم تون توی فایل blade دقت کنید که به post->id$ دسترسی داشته باشید 

 

موفق باشید

محمدرسول اصغری ۳۰ فروردین ۱۴۰۳، ۱۰:۵۹