بهترین زمان یادگیری بیشتر، برای شروع یک رقابت دلچسب! مهارتتو ارتقا بده...
تابستون کوتاهه! کلیک کن!سلام چجوری میتونم دیتایی که از سمت دیتابیس میاد رو سفارشی سازی کنم؟
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);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟