Я вижу здесь 2 варианта ..
1.
Вместо того, чтобы выставлять свой идентификатор, вы можете добавить поле uuid в вашу таблицу, учитывая, что, вероятно, вы хотите, чтобы потребители API моглизапросить / обновить / удалить отдельные объекты, которые вам необходимо идентифицировать?
Таким образом, у вас все еще есть уникальный идентификатор для ваших объектов, но его невозможно угадать.
2.
Если вы не хотите добавлять дополнительные поля и все равно хотите зашифровать идентификатор, почему бы не использовать вместо этого объект Resource Response?
Это позволит вам настроить ответ перед его возвратом.
См .: https://laravel.com/docs/5.7/eloquent-resources#resource-responses
Итак, в вашем контроллере:
public function index(Request $request)
{
$posts = Post::all();
return new PostResourceCollection($posts);
}
PostResourceс шифрованием id
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
use Crypt;
class PostResource extends Resource
{
public function toArray($request)
{
return [
'id' => Crypt::encrypt($this->id]),
'x' => $this->x,
'y' => $this->y,
];
}
}
PostResourceCollection, который просто вызывает коллекцию на PostResource
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class PostResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return PostResource::collection($this->collection);
}
}