This package gives nested CRUD operations on your edit page.
Inspired by Nested resources in Backpack CRUD
E.g.
Gives the avility of CRUD operations of comment
model as a field on user
edit page.
Only supports Laravel-Backpack/CRUD v4.
composer require onkbear/backpack-nested-crud
There are four (instead of create, read, update, delete) nested CRUD operations.
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedListOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedCreateOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedUpdateOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedDeleteOperation;
Please create User
model and Comment
model with relationship.
Please create UserCrudController
.
class UserCrudController extends CrudController
{
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
public function setup()
{
CRUD::setModel('App\Models\User');
CRUD::setRoute(config('backpack.base.route_prefix').'/user');
CRUD::setEntityNameStrings('user', 'users');
}
protected function setupListOperation()
{
CRUD::addColumns(['name']);
}
protected function setupCreateOperation()
{
CRUD::addField([
'name' => 'name',
'label' => 'Name',
'type' => 'text',
'tab' => 'Texts',
]);
}
protected function setupUpdateOperation()
{
$this->setupCreateOperation();
CRUD::addField([
'name' => 'comments',
'label' => 'Comment',
'type' => 'nested_crud',
'target' => 'comment',
'model' => 'App\Models\Comment',
'tab' => 'Comments', // optional
]);
}
}
use App\Http\Requests\CommentRequest as StoreRequest;
use App\Http\Requests\CommentRequest as UpdateRequest;
class UserCommentCrudController extends CrudController
{
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedListOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedCreateOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedUpdateOperation;
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedDeleteOperation;
public function setup()
{
// ...
// get the user_id parameter
$user_id = \Route::current()->parameter('user_id');
// set a different route for the admin panel buttons
CRUD::setRoute(config('backpack.base.route_prefix').'/user/'.$user_id.'/comment');
// show only that user's comments
CRUD::addClause('where', 'user_id', $user_id);
// ...
}
protected function setupNestedListOperation()
{
// ...
}
protected function setupNestedCreateOperation()
{
CRUD::setValidation(StoreRequest::class);
// ...
}
protected function setupNestedUpdateOperation()
{
CRUD::setValidation(UpdateRequest::class);
// ...
}
Setup the route in route/custom.php
Route::crud('user/', 'UserCrudController');
Route::group(['prefix' => 'user/{user_id}'], function() {
Route::crud('comment', 'UserCommentCrudController');
});
You have following routes.
admin/user/
admin/user/{user_id}/comment/
That's it.
You can also use backpack operations into UserCommentCrudController
or extend CommentCrudController
if it is exist.
There are two templates for list view.
nested_crud::nested_list
: table view (default)nested_crud::nested_grid_list
: grid view
If you would like to use grid view, simply use the set method below.
// UserCommentCrudController.php
protected function setupNestedListOperation()
{
$this->crud->setListView('nested_crud::nested_grid_list');
}
If you created view files with exace same name in resources/views/vendor/backpack/nested_crud
folder, it will override.