eloverde-sistemas/laravel-crud-builder

54,422
Install
composer require eloverde-sistemas/laravel-crud-builder
Latest Version:v1.0.5
PHP:^8.3|^8.4
License:MIT
Last Updated:Mar 20, 2025
Links: GitHub  ·  Packagist
Maintainer: EloverdeTech

Create and update Eloquent models from API Requests

This package allows you to create and update your Eloquent model and sync relationships based on a request. Request parameter names follow the JSON API specification as closely as possible.

Note: Inspired in Spatie's query builder package.

Basic usage

Create a model based on a Request:

Request body:

{
  data: {
    attributes: {
      name: 'Paul',
      age: 77
    }
  }
}

PHP controller code:

  use CrudBuilder\CrudBuilder;
    
  $singer = CrudBuilder::for(Singer::class)
    ->allowedAttributes('age', 'name')
    ->create();
  
  //A singer is created in database with the request data 

Update a model based on a Request:

Request body:

{
  data: {
    id: 1,
    attributes: {
      name: 'Paul',
      age: 77
    }
  }
}

PHP controller code:

  use CrudBuilder\CrudBuilder;
    
  $singer = CrudBuilder::for(Singer::class)
    ->allowedAttributes('age', 'name')
    ->update();
  
  //A singer with the requested id is updated in database with the request data 

Is sure possible to create or update based on the presence of ID in the Request with the ->createOrUpdate() method.

Update a model based on a Request, ignoring some attributes:

Request body:

{
  data: {
    id: 1,
    attributes: {
      name: 'Paul',
      surname: 'McCartney',
      age: 77
    }
  }
}

PHP controller code:

  use CrudBuilder\CrudBuilder;
    
  $singer = CrudBuilder::for(Singer::class)
    ->ignoreAttributes('age', 'surname')
    ->allowedAttributes('name')
    ->update();
  
  //A singer with the requested id is updated in database with the request data, except the ignored attributes 

Update a model based on a Request, including relationships:

Request body:

{
  data: {
    id: 1,
    attributes: {
      name: 'Paul'
    },
    relationships: {
      band: {
        data: {
          id: 1
        }
      }
    }
  }
}

PHP model code:

class SingerModel extends Model
{
  public function band()
  {
      return $this->belongsTo(Band::class);
  }
}

PHP controller code:

  use CrudBuilder\CrudBuilder;
    
  $singer = CrudBuilder::for(Singer::class)
    ->allowedAttributes('name')
    ->allowedRelations('band')
    ->update();
  
  //A singer with the requested id is updated in database with the request data, including the relationship 

Note: The only supported relationships so far are: BelongsTo and HasMany.

Related Packages

gabrieloliverio/laravel5-generators

Database metadata-based generators for Laravel 5

1
erirk/paypalpayment

laravel-paypalpayment is simple package help you process direct credit card paym...

0
doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

628,058,007 9,707
laravel/framework

The Laravel Framework.

576,155,700 34,907
laravel/tinker

Powerful REPL for the Laravel framework.

485,678,092 7,440