🐈

LaravelAdminの項目の表示方法を独自に加工・変更する

2021/09/15に公開1

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'];