Перетворення моделей Laravel у JSON для відповідей API

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 01 січня, 2025
В технологічному світі Laravel пропонує потужні інструменти для перетворення моделей Eloquent в JSON, і метод toJson() є одним з найбільш простих способів досягти цього. Досліджуйте, як цей метод може покращити ваш API, на прикладі практичного використання та налаштування виводу!

Laravel пропонує кілька способів перетворення моделей Eloquent в JSON, і toJson() є одним з найпростіших. Цей метод дозволяє гнучко налаштовувати, як ваші моделі серіалізуються для API-відповідей.

// Основне використання toJson()
$user = User::find(1);
return $user->toJson();
// З опціями форматування JSON
return $user->toJson(JSON_PRETTY_PRINT);

Розгляньмо практичний приклад системи API-відповідей з використанням toJson():

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class Article extends Model
{
    protected $appends = ['reading_time'];
 
    protected $hidden = ['internal_notes'];
 
    public function author()
    {
        return $this->belongsTo(User::class);
    }
 
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
 
    public function getReadingTimeAttribute()
    {
        return ceil(str_word_count($this->content) / 200);
    }
 
    public function toArray()
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'author' => $this->author->name,
            'reading_time' => $this->reading_time,
            'comments_count' => $this->comments()->count(),
            'created_at' => $this->created_at->toDateTimeString(),
            'updated_at' => $this->updated_at->toDateTimeString(),
        ];
    }
}
 
// У вашому контролері
class ArticleController extends Controller
{
    public function show($id)
    {
        $article = Article::with(['author', 'comments.user'])->findOrFail($id);
 
        return $article->toJson();
    }
 
    public function index()
    {
        $articles = Article::with('author')->get();
 
        return response()->json($articles);  // Неявне перетворення
    }
}

Метод toJson() у Laravel забезпечує ефективне перетворення моделей у JSON, водночас дозволяючи налаштовувати вивід завдяки атрибутам і зв'язкам моделей