laravel-admin Controller grid、detail、form でリレーション → エクスポート機能どうなるか、その他Quick search機能

DEVELOP

以下は、公式サイトよりサンプル抜粋しテストしてみました。

https://laravel-admin.org/docs/en

Grid 一覧表示でリレーション、コード→名称を取得

テーブルは、

authorsテーブル

booksテーブルで、外部キー books.author_id → author.id のリレーション

デフォルトの books 検索一覧画面

この一覧のbooks.author_id → author.first_name、author.last_nameを取得し表示する

リレーションで名称を取得して表示した画面

実装方法は、

Models > Book.php に以下のメソッドを追加

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'author_id',
        'page',
        'subtitle',
        'price'
    ];

    public function author() {
      return $this->belongsTo(Author::class);
    }
}

次に、

Controllers > BookController.php

を以下のように Grid に追加する。

    protected function grid()
    {
        $grid = new Grid(new Book());

        $grid->column('id', __('Id'));
        $grid->column('title', __('Title'));
        $grid->column('author_id', __('Author id'));
        // リレーション
        $grid->column('author.first_name', __('Author FirstName'));
        $grid->column('author.last_name', __('Author LastName'));
        $grid->column('page', __('Page'));
        $grid->column('subtitle', __('Subtitle'));
        $grid->column('price', __('Price'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));

        return $grid;
    }

次に detail でリレーション

こちらも girdと同様

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Book::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('title', __('Title'));
        $show->field('author_id', __('Author id'));
        $show->field('author.first_name', __('Author FirstName'));
        $show->field('author.last_name', __('Author LastName'));
        $show->field('page', __('Page'));
        $show->field('subtitle', __('Subtitle'));
        $show->field('price', __('Price'));
        $show->field('created_at', __('Created at'));
        $show->field('updated_at', __('Updated at'));

        return $show;
    }

最後に form で検索子画面を表示する

Selectable ディレクトリを作成し、

配下に Authors.php を新規作成する

<?php

namespace App\Admin\Selectable;

use App\Models\Author;
use Encore\Admin\Grid\Filter;
use Encore\Admin\Grid\Selectable;

class Authors extends Selectable
{
    public $model = Author::class;

    public function make()
    {
        $this->column('id');
        $this->column('first_name');
        $this->column('last_name');
        $this->column('created_at');

        $this->filter(function (Filter $filter) {
            $filter->like('first_name');
            $filter->like('last_name');
        });
    }
}

そして form に以下を追加する

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Book());

        $form->text('title', __('Title'));
        $form->belongsTo('author_id', Authors::class,'Author');
        $form->number('page', __('Page'));
        $form->text('subtitle', __('Subtitle'));
        $form->decimal('price', __('Price'));

        return $form;
    }

選択ボタンを押下すると、検索子画面が表示され、選択した物が反映される。よくあるリレーション。

ほんと簡単に実装できます。業務的なシステムがかなり効率よく作れますね。すごい!

その他、エクスポート機能はどうなる?

Grid で表示する内容がそのままエクスポート機能にも反映されました。Good!

その他、Grid に検索条件を追加してみる。Quick search

laravel-adminの公式ドキュメントより

https://laravel-admin.org/docs/en/model-grid-quick-search
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Book());

        $grid->quickSearch('title');

        $grid->column('id', __('Id'));
        $grid->column('title', __('Title'));
        $grid->column('author_id', __('Author id'));
        // リレーション
        $grid->column('author.first_name', __('Author FirstName'));
        $grid->column('author.last_name', __('Author LastName'));

        $grid->column('page', __('Page'));
        $grid->column('subtitle', __('Subtitle'));
        $grid->column('price', __('Price'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));

        return $grid;
    }

簡単ですね。その他、もっと調査やテストしてみたいと思います。

laravel-adminの次の調査としては、

  • PDFやExcel出力する機能の実装
  • リレーション(例:商品マスタの画面。カテゴリマスタなどのプルダウンやチェックボックス、ラジオボタンなど)機能の実装

PDF出力は、

Laravel8でPDFを出力する(laravel-dompdf) | 南の島のSE エンジニアブログ
Laravel8でPDFファイルを出力する方法を紹介。今回はlaravel-dompdfを利用することにより簡単にPDFファイルを出力することができました。Bladeテンプレートをベースにできるのもいいですね。インストール方法が少し難しいの...
タイトルとURLをコピーしました