前のページではリソースを編集してコメントを投稿したユーザの ID を表示することができました.ここでは,ユーザ ID の代わりにユーザ名をリレーションシップから辿って取得し,表示する様に変更します.
以前のページではデータベースのマイグレーションにリレーションシップを設定しました.次のとおりモデルファイルにも設定することでリレーションシップを辿ってコメントのオブジェクトからその投稿ユーザオブジェクトを取得できるようになります.リレーションシップの詳細はこちらを参照してください.
app/Models/Comment.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use HasFactory;
// One to Many の Many 側
public function user()
{
return $this->belongsTo('App\Models\User');
}
}
モデルでリレーションシップを設定できたので,リソースを編集してコメントを投稿したユーザのユーザ名が表示されるようにします.
app/Http/Resources/CommentResource.php (抜粋)
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
// return parent::toArray($request);
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'owner' => $this->user->name,
'updated_at' => $this->updated_at->addHours(Carbon::now()->offsetHours),
];
}
curl
コマンドを使ってコメント情報を取得すると,リソースで設定したとおり,投稿ユーザのユーザ名が表示されました.
C:\Users\Rinsaka>curl -H "Authorization: Bearer 1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0" http://192.168.56.101:8000/api/comments/1/ ⏎ {"comment":{"id":1,"title":"最初のコメント","body":"最初のコメントです!","owner":"A. Sample","updated_at":"2023-10-02T10:10:10.000000Z"}} C:\Users\Rinsaka>curl -H "Authorization: Bearer 1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0" http://192.168.56.101:8000/api/comments/2/ ⏎ {"comment":{"id":2,"title":"2つ目","body":"2つ目のコメントです!","owner":"B. Sample","updated_at":"2023-10-02T10:20:10.000000Z"}} C:\Users\Rinsaka>curl -H "Authorization: Bearer 1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0" http://192.168.56.101:8000/api/comments/3/ ⏎ {"comment":{"id":3,"title":"<三個目>のコメント","body":"シーダによってテストデータを設定します.","owner":"A. Sample","updated_at":"2023-10-02T10:30:10.000000Z"}} C:\Users\Rinsaka>curl -H "Authorization: Bearer 1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0" http://192.168.56.101:8000/api/comments/6/ ⏎ {"comment":{"id":6,"title":"渡辺 七夏","body":"2755458 富山県田辺市中央区若松町宇野5-2-8 コーポ佐々木102号 \/ akira43@example.org","owner":"C. Sample","updated_at":"2023-11-24T05:12:28.000000Z"}} C:\Users\Rinsaka>