راکت
حل شده

ذخیره داده در دیتابیس

6 پاسخ

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

    public function store(Request $request)
    {
        $data = $request->validate([
            'user_id'=> auth()->user()->id,
            'title'  => ['required','unique:blogs','max:255'],
            'body'   => ['required'],
        ]);

        $blog=Blog::create($data);
        return back();
    }

arraykeyfirst(): Argument #1 ($array) must be of type array, int given

ثبت پرسش جدید

پاسخ‌ها

6
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

بهترین پاسخ

سلام به شما دوست عزیز.
کدی که شما نوشتین کد کثیف یا به اصطلاح hard code است، چند نکته خدمتتون عرض میکنم تا کد تمیزتر یا به اصطلاح clean code داشته باشید.
شما نباید اعتبار سنجی رو داخل کنترلر انجام بدید، در واقع باید یه کلاس Request به صورت زیر طبق مستندات لاراول ایجاد کنید.

php artisan make:request StoreBlogRequest

حالا وارد مسیر زیر بشید:

app/Http/Request

و داخل فایل

StoreBlogRequest.php

مقدار return فانکشن authorize رو از false به true تغییر بدین که میشه به صورت زیر:

public function authorize()
{
    return true;
}

و فانکشن rules رو به صورت زیر بنوسید:

public function rules()
{
    return [
        'title' => ['required','unique:blogs','max:255'],
        'body' => ['required'],
    ];
}

حالا داخل کنترلر مربوطه ابتدا کلاس StoreBlogRequest رو use کنید:

use App\Http\Requests\StoreBlogRequest;

و در آخر کنترلر خود رو به صورت زیر بنویسید.

public function store(StoreBlogRequest $request)
{
    $data = $request->validated();
    auth()->user()->blogs()->create($data);
    return back();
}

یه نکته هم لازمه در آخر بهتون بگم و اونم اینه که هدف این نیست که فقط ما بشینیم و 4 خط کد بنویسیم و یه خروجی بگیریم، هدف باید این باشه که من توسعه دهنده جوری کد بنویسیم که هم دیگران راحت بتونن کد منو بخونن و هم در آینده اگه خواستم کدمو تغییر بدم راحت بتونم این کارو انجام بدم.
امیدوارم مفید بوده باشه.
موفق باشید.

علیرضا
علیرضا
@mrkaf

تخصص: داستان داریم حالا..

درود
زیاد با لاراول آشنایی ندارم

        'user_id'=> auth()->user()->id,

اما کد بالا را با این کد جایگزین کنید احتمالا درست بشه

 'user_id'=> 'required',
m.mahmoudi
m.mahmoudi
@m.mahmoudi7276

نه نشد چون باید این user_id رو از جدول کلربر ها دریافت کنه

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

اشکان زایر اومالی
اشکان زایر اومالی
@ashkanzayeromali

تخصص: mevn fullstack

سلام میگه این متغیر ($array) باید از نوع ارایه باشه که مثل اینکه کد شما ارایه برنمیگردونه چک کنید دقیقا چی برمیگردونه مثلا با لاگ گرفتن و درستش کنید

m.mahmoudi
m.mahmoudi
@m.mahmoudi7276

مربوط به این کد هست
'userid'=> auth()->user()->id,
mhyeganeh@
endworld@
hesammousavi@
endworld@
rezajahangir@

این مدل blog هست:

class Blog extends Model
{
    use HasFactory;
    protected $fillable = ['title', 'slug' , 'body'];

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

و در user

 protected $fillable = [
        'name',
        'email',
        'password',
    ];

 public function blogs()
    {
        return $this->hasMany(Blog::class);
    }
m.mahmoudi
m.mahmoudi
@m.mahmoudi7276

ممنون از شما آقای جهانگیر خیلی کامل و مفید توضیح دادید.
خیر ببینید.
جواب گرفتم.

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

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