Class Ezadev\Admin\Grid is used to generate tables based on the data model,for example,we have a table movies in database:
CREATETABLE `movies` (`id`int(10) unsigned NOT NULL AUTO_INCREMENT,`title`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`director`int(10) unsigned NOT NULL,`describe`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`rate`tinyint unsigned NOT NULL,`released` enum(0, 1),`release_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',`created_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',`updated_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
And the model of this table is App\Models\Movie,The following code can generate the data grid for table movies:
useApp\Models\Movie;useEzadev\Admin\Grid;useEzadev\Admin\Facades\Admin;useApp\Models\Movie;useEzadev\Admin\Grid;useEzadev\Admin\Facades\Admin;$grid =newGrid(newMovie);// The first column displays the id field and sets the column as a sortable column$grid->id('ID')->sortable();// The second column shows the title field, because the title field name and the Grid object's title method conflict, so use Grid's column () method instead
$grid->column('title');// The third column shows the director field, which is set by the display($callback) method to display the corresponding user name in the users table
$grid->director()->display(function($userId) {returnUser::find($userId)->name;});// The fourth column appears as the describe field$grid->describe();// The fifth column is displayed as the rate field$grid->rate();// The sixth column shows the released field, formatting the display output through the display($callback) method$grid->released('Release?')->display(function ($released) {return $released ?'yes':'no';});// The following shows the columns for the three time fields$grid->release_at();$grid->created_at();$grid->updated_at();// The filter($callback) method is used to set up a simple search box for the table$grid->filter(function ($filter) {// Sets the range query for the created_at field $filter->between('created_at','Created Time')->datetime();});
Basic Usage
Add a column
// Add the column directly through the field name `username`$grid->username('Username');// The effect is the same as above$grid->column('username','Username');// Display JSON inline fields$grid->column('profile->mobile','手机号');// Add multiple columns$grid->columns('email','username'...);
$grid->text()->display(function($text) {returnstr_limit($text,30,'...');});$grid->name()->display(function ($name) {return"<span class='label'>$name</span>";});$grid->email()->display(function ($email) {return"mailto:$email";});// column not in table$grid->column('column_not_in_table')->display(function () {return'blablabla....';});
The closure passed to method display() is bind to row data object, you can use other column data in current row.
$grid->column('first_name');$grid->column('last_name');// column not in table$grid->column('full_name')->display(function () {return$this->first_name.' '.$this->last_name;});
Disable the create button
$grid->disableCreateButton();
Disable Pagination
$grid->disablePagination();
Disable data filter
$grid->disableFilter();
Disable the export button
$grid->disableExport();
Disable row selector
$grid->disableRowSelector();
Disable row actions
$grid->disableActions();
Disable column selector
$grid->disableColumnSelector();
Set options for perPage selector
$grid->perPages([10,20,30,40,50]);
Relation
One to one
The users table and the profiles table are generated one-to-one relation through the profiles.user_id field.
CREATETABLE `users` (`id`int(10) unsigned NOT NULL AUTO_INCREMENT,`name`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`email`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`created_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',`updated_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;CREATETABLE `profiles` (`id`int(10) unsigned NOT NULL AUTO_INCREMENT,`user_id`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`age`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`gender`varchar(255) COLLATE utf8_unicode_ci NOT NULL,`created_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',`updated_at`timestampNOT NULLDEFAULT'0000-00-00 00:00:00',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;