izica / relations-widgets-for-backpack
Widgets for preview model relations in laravel backpack
Installs: 11 404
Dependents: 0
Suggesters: 0
Security: 0
Stars: 29
Watchers: 5
Forks: 13
Open Issues: 1
Language:Blade
Requires
- backpack/crud: ^4.0|^4.1.0|^5.0|^6.0
README
3.0 Whats new:
- relation_table search input
- relation_table create button with relation attribute reference
- relation_table pagination
Installation
composer require izica/relations-widgets-for-backpack
Screenshots
Features
- use widgets for showing relations in show operation
- show or hide panels or fields by conditions
- build field value by closure
- use dot orm notation for accessing relation fields
Documentation
-
relation_panel
name
- name of relationlabel
- panel labelbackpack_crud
- backpack crud url,buttons
(optional) - setfalse
to hide all action buttonsbutton_show
(optional) - setfalse
to hidebutton_edit
(optional) - setfalse
to hidevisible
(optional) - closure for hiding or showing panelfields
(optional) - fields array, by default get columns fromfillable
in modelname
- namelabel
- for fieldclosure
- use closure instead of name field,visible
(optional) - closure for hiding or showing panel
-
relation_table
name
- (required) name of relationlabel
- panel labelrelation_attribute
- (optional) used for passing url parameter name for button_createsearch
- (optional)closure
, enables search inputper_page
- (optional) enables pagination,null
by defaultbackpack_crud
- backpack crud url,buttons
(optional) - setfalse
to hide all action buttonsbutton_create
(optional) - setfalse
to hidebutton_show
(optional) - setfalse
to hidebutton_edit
(optional) - setfalse
to hidebutton_delete
(optional) - setfalse
to hidevisible
(optional) -closure
for hiding or showing panelcolumns
(optional) - columnsarray
, by default get columns fromfillable
in modelname
- namelabel
- for fieldclosure
- useclosure
instead of name field for passing value,
Usage
Relation panel
belongsTo
, hasOne
use Backpack\CRUD\app\Library\Widget; protected function setupShowOperation() { Widget::add([ 'type' => 'relation_panel', 'name' => 'account_contact', 'label' => 'Account contact info', 'backpack_crud' => 'accountcontact', 'visible' => function($entry){ return $entry->is_public_person; }, 'buttons' => false, 'fields' => [ [ 'label' => 'Birthdate', 'closure' => function($entry){ return date('d.M.Y', $entry->birthdate); } ], [ 'label' => 'Contact phone', 'name' => 'contact_phone', ], [ 'label' => 'Contact email', 'name' => 'contact_email', ], [ 'label' => 'Address', 'name' => 'address.name', 'visible' => function($entry){ return !!$entry->address; } ], ], ])->to('after_content'); }
Relation table
hasMany
protected function setupShowOperation() { Widget::add([ 'type' => 'relation_table', 'name' => 'order_cargos', 'label' => 'Order cargo list', 'backpack_crud' => 'ordercargo', 'visible' => function($entry){ return $entry->order_cargos->count() > 0; }, 'search' => function ($query, $search) { return $query->where('name', 'like', "%{$search}%"); }, 'relation_attribute' => 'order_id', 'button_create' => true, 'button_delete' => false, 'columns' => [ [ 'label' => 'Type', 'name' => 'order_cargo_type.name', ], [ 'label' => 'Weight', 'name' => 'weight', ], [ 'label' => 'Value, $', 'closure' => function($entry){ return "{$entry->value}$"; } ], ], ])->to('after_content'); }
How to enable creating related model
You need to set:
button_create
=>true
relation_attribute
=>attribute_name
Next you need to add to relation/select field default
value:
CRUD::addField([ 'type' => "relationship", 'name' => 'order', 'default' => $_GET['order_id'] ?? null ]);