Reza Ghorbani
4 سال پیش توسط Reza Ghorbani مطرح شد
8 پاسخ

تبدیل id به hash

سلام
من میخوام در api به جای این که id جدول نمایش داده بشه یک hash از اون رو نشون بده
از getAttribute استفاده کردم ولی دیگه relationships ها کار نمی کنه !!!!
ممنون میشم کمک کنید


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
1

میتونی از 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,
        ];
    }
}

https://laravel.com/docs/7.x/eloquent-resources


Reza Ghorbani
@rezaghorbani1377 4 سال پیش مطرح شد
0

@juza66 خیلی ممنون
من باید تک تک فیلد ها رو بزارم ؟؟ نمیشه فقط ایدی تغییر کنه


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
0

من باید تک تک فیلد ها رو بزارم ؟؟

تا جایی که میدونم بله باید همه اطلاعاتی که میخوای برگردونی بذاری تویی این ریسورس چون داری متد toArray رو override میکنی پس داده ای برنمگیرده به جز اطلاعات متد toArray.

اینم بگم میتونی همین متد toArray رو تویی مدلت استفاده کنی و نیازی به ریسورس نداری ولی ممکنه شما به جز API از خود وبسایتی که با لاراول ساختی استفاده بکنی و اونجا به جای HASH ID ممکنه خود IDرو بخوای پس بهترین روش استفاده از Resource هستش


Reza Ghorbani
@rezaghorbani1377 4 سال پیش مطرح شد
0

من همین الان تست کردم relationships به مشکل میخوره حتما باید اسم متد رو هم بزارم تا نشون بده اگه هم بزارم داخل همه در خواست ها نشون میده ی در خواست لیست کاربر های خالی بوک مارک هاشو هم میده !!!


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
0

بیشتر درباره relationships تون بگین ببینم کجا به مشکل برمیخوره، چطوری مینویسی که به مشکل برمیخوره؟!!


Reza Ghorbani
@rezaghorbani1377 4 سال پیش آپدیت شد
0

این مدل

<?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();
});

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

برای بوکمارک هاتون user_id مشخص کردی؟!!

return $this->belongsToMany('App\Place', 'bookmarks', 'user_id');

Reza Ghorbani
@rezaghorbani1377 4 سال پیش آپدیت شد
0

متوجه نشدم منظورتون چیه ؟
ی جدول به اسم بوک مارک دارم فقط داخلش
user_id و place_id هست از این طریق بوک مارک های کاربر رو میگیرم


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

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