راکت
حل شده

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

7 پاسخ

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

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

ثبت پرسش جدید

پاسخ‌ها

7
مهدی
مهدی
@diajan

تخصص: front-end Dev

بهترین پاسخ

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

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

تخصص: یه برنامه نویس

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

سینا شاه‌اویسی
سینا شاه‌اویسی
@sinashahoveisi

تخصص: برنامه نویس

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

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

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

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

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

پیشنهادم استفاده از متدهای 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

تخصص: برنامه نویس بامزه

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

مهدی
مهدی
@diajan

تخصص: front-end Dev

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

@mhyeganeh

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

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