composer create-project laravel/laravel responses dev-develop cd responses touch database/database.sqlite php artisan make:model Post -mfa php artisan make:resource UsersWithPostsResource php artisan make:resource PostsResource php artisan make:controller UsersController --resource
.env
file the use of the SQLite database, removing all the others. DB_CONNECTION=sqlite
The posts migration
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('body'); $table->unsignedInteger('user_id'); $table->timestamps(); });
database/factories/PostFactory.php
<?php use Faker\Generator as Faker; $factory->define(App\Post::class, function (Faker $faker) { return [ 'title' => $faker->sentence, 'body' => $faker->paragraph, 'user_id' => function () { return factory(\App\User::class); } ]; });
app/User.php
public function posts() { return $this->hasMany(Post::class); }
app/Post.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $guarded = []; }
php artisan migrate:fresh php artisan tinker factory(App\Post::class)->times(2)->create(); factory(App\Post::class)->times(2)->create(['user_id' => 1]);
Route::apiResource('/users', 'UsersController');
/** * Display a listing of the resource. * * @param User $user * @return \Illuminate\Http\Response */ public function index(User $user) { return new UsersWithPostsResource($user->paginate()); }
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\Resource; class UsersWithPostsResource extends Resource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request * @return array */ public function toArray($request) { // Eager load $this->resource->load('posts'); return $this->resource->map(function ($item) { return [ 'name' => $item->name, 'email' => $item->email, 'posts' => new PostsResource($item->posts) ]; }); } }
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\Resource; class PostsResource extends Resource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request * @return array */ public function toArray($request) { return $this->resource->map(function ($item) { return [ 'title' => $item->title ]; }); } }
Source: https://habr.com/ru/post/336432/
All Articles