سلام
من میخوام در api به جای این که id جدول نمایش داده بشه یک hash از اون رو نشون بده
از getAttribute استفاده کردم ولی دیگه relationships ها کار نمی کنه !!!!
ممنون میشم کمک کنید
میتونی از Eloquent: API Resources استفاده کنی، کارشون اینه که قبل از اینکه اطلاعات رو برگردونی مشخص کنی چه ایتم ها با چه نوع برگردن
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/
Transform the resource into an array.
@param \Illuminate\Http\Request $request
@return array
/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}
@juza66 خیلی ممنون
من باید تک تک فیلد ها رو بزارم ؟؟ نمیشه فقط ایدی تغییر کنه
شاید پاسخ شما همینجا باشد
من باید تک تک فیلد ها رو بزارم ؟؟
تا جایی که میدونم بله باید همه اطلاعاتی که میخوای برگردونی بذاری تویی این ریسورس چون داری متد toArray رو override میکنی پس داده ای برنمگیرده به جز اطلاعات متد toArray.
اینم بگم میتونی همین متد toArray رو تویی مدلت استفاده کنی و نیازی به ریسورس نداری ولی ممکنه شما به جز API از خود وبسایتی که با لاراول ساختی استفاده بکنی و اونجا به جای HASH ID ممکنه خود IDرو بخوای پس بهترین روش استفاده از Resource هستش
من همین الان تست کردم relationships به مشکل میخوره حتما باید اسم متد رو هم بزارم تا نشون بده اگه هم بزارم داخل همه در خواست ها نشون میده ی در خواست لیست کاربر های خالی بوک مارک هاشو هم میده !!!
این مدل
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Vinkla\Hashids\Facades\Hashids;
class User extends Model
{
public function bookmarks()
{
return $this->belongsToMany('App\Place', 'bookmarks');
}
public function toArray()
{
return [
'id' => Hashids::connection(get_called_class())->encode($this->id),
'name' => $this->name,
'bookmarks' => $this->bookmarks
];
}
}
اینم ی در خواست تست
<?php
Route::post('/test', function () {
return App\User::all();
});
اینم نتیجه که همراه relationships نشون میده
[
{
"id": "4wOXMdWZGe",
"name": "رضا",
"bookmarks": [
{
"id": 1,
"name": "مکان شماره 1",
"phone": "11111111111",
"logo": "no-image-slide.webp",
"category_id": 2,
"deleted_at": null,
"created_at": "2020-03-09T18:27:58.000000Z",
"updated_at": "2020-03-09T18:27:58.000000Z",
"pivot": {
"user_id": 1,
"place_id": 1
}
}
]
},
{
"id": "G7DXxpXxbA",
"name": "سارا",
"bookmarks": []
},
{
"id": "pwQWBOX6v7",
"name": "علی",
"bookmarks": []
}
]
بوک مارک ها رو هم نشون میده ولی نباید اینطور باشه اگه هم نزارم تو در خواست زیر نشون نمیده بوک مارک ها رو
<?php
Route::post('/test', function () {
return App\User::with('bookmarks')->get();
});متوجه نشدم منظورتون چیه ؟
ی جدول به اسم بوک مارک دارم فقط داخلش
user_id و place_id هست از این طریق بوک مارک های کاربر رو میگیرم