🐈
LaravelAdminの項目の表示方法を独自に加工・変更する
Laravelでデータの加工をするといえばモデルで get〇〇Attribute
と表記するアクセサがあります。
僕もよくそれを使用するのですが、Laravel-Adminで表示する項目を独自に加工したい場合があります。
今回は記事を保存すると仮定して、記事の投稿日時(項目名:posted_at, 型:datetime) を加工して表示する方法を例にしてお伝えしたいと思います。
準備
まずはControllerを作成します。
作成済みの方はスキップしてください!
php artisan admin:make ArticleController
そして、 app/Admin/routes.php
にルートを追記します。
router->resource('articles', ArticleController::class);
ArticleControllerで表示する項目のデータ加工を行う
gridで一覧表示しているデータの加工を行う
記事の投稿日時(項目名:posted_at, 型:datetime)を加工します。
gridでデータ加工を行う際は display
を行うとできます。
protected function grid()
{
$grid = new Grid(new Article());
$grid->column('posted_at', '投稿日')->display(function () {
return Carbon::parse($this->posted_at)->format('Y年m月d日 h時i分s秒');
});
}
detailで個別表示しているデータの加工を行う
detailの場合は as
でデータ加工を行うことができます。
protected function detail($id)
{
$article = Article::findOrFail($id);
$show = new Show($article);
$show->field('id', __('Id'));
$show->field('posted_at', '投稿日')->as(function ($postedAt) {
return Carbon::parse($postedAt)->format('Y年m月d日 H時i分s秒');
});
}
終わりに
データ加工するためのメソッドは gridとdetailで異なるので少し調べるのに時間がかかりましたが、一回できるともう楽ちんですね。
enumなどの他のデータ加工にも使えそうです!
Discussion
モデルにこちょこちょ書いたら、アクセサ使えますよ
protected $appends = ['full_name'];