eloverde-sistemas/laravel-crud-builder

1.0.3 2023-01-06 03:08 UTC

This package is auto-updated.

Last update: 2024-05-06 06:03:33 UTC


README

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.