مهدی
3 سال پیش توسط مهدی مطرح شد
7 پاسخ

تغییر دیتا قبل از ارسال به همراه pagination

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

public function index()
    {
        $products = Product::paginate();
        return response($products);
    }

میخام این خروجی رو دوتا پراپرتی دیگه بهش اضافه یا حذف کنم چیکار کنم؟

 {
            "id": 1,
            "category_id": 1,
            "name": "گوشی آیفون 11",
            "description": "گوشی آیفون محصول شرکت اپل",
            "color": "[\"orange\",\"pink\",\"white\",\"black\"]",
            "image": "https://www.refurbished.nl/cache/images/iphone-11-groen_600x600_BGresize_16777215-tj.png",
            "price": 130000,
            "created_at": "2022-04-05T11:01:25.000000Z",
            "updated_at": "2022-04-05T11:01:25.000000Z"
        }

@hesammousavi


ثبت پرسش جدید
مهدی
تخصص : front-end Dev
@diajan 3 سال پیش مطرح شد
0

به این شکل میشه که متا دیتا ها هم نمایش داده بشن

public function index()
    {
        $products = Product::paginate();
        foreach ($products as $product) {
            $product['id'] = $product['id'];
            $product['name'] = $product['name'];
            $product['category'] = Category::where('id', $product['category_id'])->first();
            $product['colors'] = json_decode($product['color']);
            $product['image'] = $product['image'];
            $product['price'] = $product['price'];
            $product['description'] = $product['description'];
        }

        return response($products);
    }

مهدی اردشیر
تخصص : یه برنامه نویس
@mehdi0121 3 سال پیش آپدیت شد
0

سلام فکر کنم با ریسورس بشه
اینو رو بخون شاید کمکت کرد
https://laravel.com/docs/9.x/eloquent-resources


سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 3 سال پیش مطرح شد
0

سلام اگه اضافه و کم شدن دیتایی که از دیتابیس میگیری منظورته میتونی مثلا از کد زیر استفاده کنی

DB::table('users')
   ->select('id', 'name')
   ->paginate();

اگه میخوای یه پردازشی انجام بدی روی دیتای خروجی که با query نمیشه هندلش کرد، با همین چیزی که نوشتی کل دیتا رو میگیری(یا پیج بندی شده) و یه حلقه روی اون دیتا میزنی و پردازشت رو انجام میدی


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

جواب آقای اردشیر در بالا درسترین هست


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

پیشنهادم استفاده از متدهای getCollection و transform به شکل زیر هست:

$products = Product::paginate()->getCollection()->transform(fn($product) =>  [
    'id' => $product->id,
    'category_id' => $product->category_id,
    //...
    'custom_field' => "SOMETHING"
]),

return response()->json($products);

پ ن: سینتکس استفاده شده در کد بالا مختص php +8.0 هست.


میلاد خسروی
تخصص : برنامه نویس بامزه
@milwad 3 سال پیش مطرح شد
0

سلام خسته نباشید
لاراول توی داک خودش تو سرفصل Eloquent: API Resources اونجا کامل راهنمایی کرده و کلی متد دیه هم برات گذاشته که به نظرم به دردت میخوره


مهدی
تخصص : front-end Dev
@diajan 3 سال پیش آپدیت شد
0

سلام مشکل اینجاست زمانی که اینجوری مینویسیم دیگه متا دیتا های paginate رو نمیده !

@mhyeganeh


مهدی
تخصص : front-end Dev
@diajan 3 سال پیش مطرح شد
0

به این شکل میشه که متا دیتا ها هم نمایش داده بشن

public function index()
    {
        $products = Product::paginate();
        foreach ($products as $product) {
            $product['id'] = $product['id'];
            $product['name'] = $product['name'];
            $product['category'] = Category::where('id', $product['category_id'])->first();
            $product['colors'] = json_decode($product['color']);
            $product['image'] = $product['image'];
            $product['price'] = $product['price'];
            $product['description'] = $product['description'];
        }

        return response($products);
    }

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

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