سلام چجوری میتونم دیتایی که از سمت دیتابیس میاد رو سفارشی سازی کنم؟
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"
}
به این شکل میشه که متا دیتا ها هم نمایش داده بشن
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);
}
سلام فکر کنم با ریسورس بشه
اینو رو بخون شاید کمکت کرد
https://laravel.com/docs/9.x/eloquent-resources
سلام اگه اضافه و کم شدن دیتایی که از دیتابیس میگیری منظورته میتونی مثلا از کد زیر استفاده کنی
DB::table('users')
->select('id', 'name')
->paginate();
اگه میخوای یه پردازشی انجام بدی روی دیتای خروجی که با query نمیشه هندلش کرد، با همین چیزی که نوشتی کل دیتا رو میگیری(یا پیج بندی شده) و یه حلقه روی اون دیتا میزنی و پردازشت رو انجام میدی
پیشنهادم استفاده از متدهای 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 هست.
سلام خسته نباشید
لاراول توی داک خودش تو سرفصل Eloquent: API Resources اونجا کامل راهنمایی کرده و کلی متد دیه هم برات گذاشته که به نظرم به دردت میخوره
سلام مشکل اینجاست زمانی که اینجوری مینویسیم دیگه متا دیتا های paginate رو نمیده !
به این شکل میشه که متا دیتا ها هم نمایش داده بشن
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);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟