m.mahmoudi
2 سال پیش توسط m.mahmoudi مطرح شد
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


ثبت پرسش جدید
رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
1

سلام به شما دوست عزیز.
کدی که شما نوشتین کد کثیف یا به اصطلاح 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 2 سال پیش مطرح شد
0

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

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

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

 'user_id'=> 'required',

m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

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


اشکان زایر اومالی
تخصص : mevn fullstack
@ashkanzayeromali 2 سال پیش مطرح شد
0

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


m.mahmoudi
@m.mahmoudi7276 2 سال پیش آپدیت شد
0

مربوط به این کد هست
'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);
    }

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
1

سلام به شما دوست عزیز.
کدی که شما نوشتین کد کثیف یا به اصطلاح 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 خط کد بنویسیم و یه خروجی بگیریم، هدف باید این باشه که من توسعه دهنده جوری کد بنویسیم که هم دیگران راحت بتونن کد منو بخونن و هم در آینده اگه خواستم کدمو تغییر بدم راحت بتونم این کارو انجام بدم.
امیدوارم مفید بوده باشه.
موفق باشید.


m.mahmoudi
@m.mahmoudi7276 2 سال پیش مطرح شد
0

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


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

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