خطای Array to string conversion هنگام ذخیره محتوای جدید

2 سال پیش توسط مهدی رضوی آپدیت شد
آفلاین
user-avatar
captan ( 1176 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

1

با سلام و عرض ادب
تابع زیر قراره اطلاعات فرم رو ذخیره کنه ولی با خطای Array to string conversion مواجه میشم .

    public function store(ArticleRequest $request)
    {
        $imagesUrl = $this->uploadImages($request->file('images'));
        auth()->user()->articles()->create(array_merge($request->all() , [ 'images' => $imagesUrl]));
        return redirect(route('articles.index'));
    }

تابعی که با استفاده از اون اطلاعات تصویر رو ذخیره میکنم هم به شرح زیر است :
اطلاعات مورد استفاده تصویر (اندازه ها و آدرس ها) به صورت آرایه بر گردونده میشه .. اونو چطور ذخیره کنم که خطای مورد نظر رو نداشته باشم ؟

protected function uploadImages($files)
    {
        $year = Carbon::now()->year;
        $month = Carbon::now()->month;
        $path = "/upload/images/{$year}/{$month}/";
        $fileName = $files->getClientOriginalName();

        $file = $files->move(public_path($path),$fileName);
        $sizes = ['300','600','900'];
        $url['images'] = $this->resize($sizes,$file,$path,$fileName);
        $url['thumb'] = $url['images'][$sizes[0]];
        return $url;
    }

    private function resize($sizes,$file,$path,$fileName)
    {
        $images['org'] = $path.$fileName;
        foreach ($sizes as $size){
            $images[$size] = $path."{$size}_".$fileName ;

            Image::make($file->getRealPath())->resize($size,null,function ($constraint) {
                $constraint->aspectRatio();
            })->save(public_path($images[$size]));
        }
        return $images;
    }

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

بهترین پاسخ
آفلاین
user-avatar
captan
4 سال پیش

حل شد ؛ در لاراول راه حلش اینه :
داخل مودل مورد نظر بایستی تعریف بشه که اون فیلد از نوع ارایه می باشد .

protected $casts = ['images' => 'array'];
آفلاین
user-avatar
captan ( 1176 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

حل شد ؛ در لاراول راه حلش اینه :
داخل مودل مورد نظر بایستی تعریف بشه که اون فیلد از نوع ارایه می باشد .

protected $casts = ['images' => 'array'];
آفلاین
user-avatar
vahid ( 210 تجربه )
2 سال پیش

لینک کوتاه اشتراک گذاری

0

[email protected] - الان منم همین مشکل رو دارم ولی الان از راهنماییتون چیزی متوجه نشدم. اون casts کجای پروژه است توی کد ها که نیست:(

آفلاین
user-avatar
hamed sarkhosh ( 31256 تجربه )
2 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

@vahidyaghma1371
$cast هارو باید در model مربوطه اعمال کنید.
یعنی مثلا در مدل article به لاراول می فهمونید که این ستون از جدول من می تونه یک array رو ذخیره کنه

آفلاین
user-avatar
vahid ( 210 تجربه )
2 سال پیش

لینک کوتاه اشتراک گذاری

0

@ham.sarkhosh
الان من پروژم یک چیز دیگست و از سورس شما استفاده نمیکنم . و در پروژم cast ندارم . این cast که میگین یک اسم خاصه یا هر اسمی میتونه باشه؟
نگاه کنین این کد منه

public function store(Request $request)
    {
        $this->validate(request(),[
            'title' => 'required|max:250',
            'type' => 'required',
            'description' => 'required',
            'image' => 'required|mimes:jpeg,png,bmp',
            'path' => 'required|mimes:txt,doc,pdf',
            'category_id' => 'required',
            'price' => 'required',
        ]);

        $file = $request->file('image');
        if ($request->hasFile('image'))
        {
            $imageUrl = $this->uploadImage($file);
        }

        $file1 = $request->file('path');
        if ($request->hasFile('path'))
        {
            $sourceUrl = $this->uploadSource($file1);
        }

        $book = Book::create(array_merge($request->all(),['image' => $imageUrl],['path' => $sourceUrl]));
        $book->categories()->sync(request('category_id'));
        return redirect('admin/book/create');
    }

مشکل این کجاست؟

اینا هم دو تا متد مورد نظر

private function uploadImage($file)
    {
        $imagePath = "\upload\images";
        $filename = time().'.'. $file->getClientOriginalName();
        $file = $file->move(public_path($imagePath),$filename);
        return $filename;
    }

    private function uploadSource($file1)
    {

        $sourcePath = "\upload\sources";
        $filename1 =  time().'.'.$file1->getClientOriginalName();
        $file1 = $file1->move(public_path($sourcePath),$filename1);
        return $filename1;
    }
آفلاین
user-avatar
vahid ( 210 تجربه )
2 سال پیش

لینک کوتاه اشتراک گذاری

0

من توی مدلم این کد رو اضاف کردم ولی بازم مشکل همونه
protected $casts = [
'images' => 'array',
'path' => 'array'
];

آفلاین
user-avatar
hamed sarkhosh ( 31256 تجربه )
2 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

@vahidyaghma1371
میشه متن ارروتون رو هم بگذارید تا بشه فهمید مشکل از کجاست؟

آفلاین
user-avatar
مهدی رضوی ( 70 تجربه )
2 سال پیش

لینک کوتاه اشتراک گذاری

0

سلام
منم همین مشکلو داشتم. با گذاشتن اون کد توی مدل درست شد اما حالا هربار که میخواد اطلاعات رو توی دیتابیس ذخیره کنه ، از هر درخواست دو تا توی دیتابیس میسازه .یعنی با هر بار ارسال اطلاعات به دیتابیس برای ذخیره دو تا رکورد ذخیره میشه. مشکل کجاست؟

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.