Skip to content

API Reference

The AutoCrud trait provides a comprehensive set of public methods for interacting with your models programmatically.

Returns the field definitions for the model.

protected static function getFields(): array

Returns: Array of field definitions

Example:

$fields = User::getFields();

Returns relationships to be loaded with the model.

public static function getIncludes(): array

Returns: Array of relationship names

Automatically includes:

  • 'records.user'
  • Relationships defined in getFields()
  • Relationships from $externalRelations

Returns the API endpoint for the model.

public static function getEndpoint($model = null): string

Parameters:

  • $model (optional): Model instance or class name

Returns: API endpoint string (e.g., /laravel-auto-crud/users)

Returns the camelCase model name.

public static function getModelName(): string

Returns: Model name in camelCase with initial lowercase

Example:

// For UserProfile model
UserProfile::getModelName(); // returns "userProfile"

Returns custom validation rules.

public static function getCustomRules(): array

Returns: Array of custom validation rules

Default: Empty array []

Returns custom forbidden actions.

public static function getCustomForbiddenActions(): array

Returns: Array of forbidden actions

Default: Empty array []

Returns all forbidden actions (including custom ones).

public static function getForbiddenActions(): array

Returns: Array of forbidden actions by role

Returns enriched external relationships.

public static function getExternalRelations(): array

Returns: Array of external relationship definitions with added endpoints

Returns fields that should appear in forms.

public static function getFormFields(): array

Returns: Array of fields where form === true, plus auto-generated comboField entries

Returns fields that should appear in tables.

public static function getTableFields(): array

Returns: Array of fields where table === true

Returns calculated table headers.

protected static function getTableHeaders(): array

Returns: Array of table header definitions

Returns the complete payload for frontend consumption.

public static function getModel($processedModels = []): array

Parameters:

  • $processedModels: Array to prevent circular references

Returns: Complete model payload including:

  • Field definitions
  • Validation rules
  • Relationships
  • Endpoints
  • Table headers
  • Form fields

Returns field definitions for table key placeholders.

public static function getTableKeyFields(): array

Returns: Array of field definitions used in tableKey templates

Returns field definitions for form key placeholders.

public static function getFormKeyFields(): array

Returns: Array of field definitions used in formKey templates

Returns the morphMany relationship to Record model.

public function records()

Returns: MorphMany relationship instance

Static property for calendar field configuration.

protected static $calendarFields = [
'title' => '({user.name}) - {reservation_place} {return_place}',
'start' => 'start_date',
'end' => 'end_date',
'separateEvents' => true,
'startClass' => 'start-event-class',
'endClass' => 'end-event-class',
'class' => 'default-event-class',
];

Always-loaded relationships.

protected static $includes = ['user', 'category'];

BelongsToMany external relationships.

protected static $externalRelations = [
[
'relation' => 'vehicles',
'name' => 'Vehicles',
'model' => Vehicle::class,
'pivotTable' => 'reservations_vehicles',
'foreignKey' => 'reservation_id',
'relatedKey' => 'vehicle_id',
// ... more configuration
],
];

Actions forbidden by role.

protected static $forbiddenActions = [
'user' => ['destroyPermanent', 'restore', 'destroy'],
'admin' => ['destroyPermanent'],
];

Dynamically resolves relationship methods.

public function __call($method, $parameters)

Handles:

  • BelongsTo relationships from getFields()
  • MorphTo relationships from getFields()
  • BelongsToMany relationships from $externalRelations

Constructs Eloquent relationships from field definitions.

protected function handleRelation($field)

Constructs BelongsToMany relationships from external relation definitions.

protected function handleExternalRelation($relation)

Detects if a model class uses SoftDeletes trait.

protected static function usesSoftDeletes($modelClass): bool
// Get complete model payload for frontend
$modelData = User::getModel();
// Structure includes:
// - fields: field definitions
// - rules: validation rules
// - relationships: relationship data
// - endpoints: API endpoints
// - tableHeaders: table configuration
// - formFields: form configuration
// Get user relationship dynamically
$user = $model->user; // Calls handleRelation() internally
// Get external relationships
$vehicles = $reservation->vehicles; // Calls handleExternalRelation()
// Get fields for form rendering
$formFields = User::getFormFields();
// Get fields for table rendering
$tableFields = User::getTableFields();
// Get table headers
$headers = User::getTableHeaders();
// Get custom validation rules
$customRules = User::getCustomRules();
// Get forbidden actions for current user role
$forbiddenActions = User::getForbiddenActions();
// Get model endpoint
$endpoint = User::getEndpoint(); // "/laravel-auto-crud/users"
// Get specific model endpoint
$userEndpoint = User::getEndpoint($userInstance);

The initializeAutoCrud() method automatically:

  1. Fills $fillable with all field names from getFields()
  2. Builds $casts based on field types
  3. Adds password fields to $hidden array

This happens automatically when the trait is used, so you don’t need to manually define these properties for fields covered by getFields().

The trait includes built-in error handling for:

  • Circular relationship references
  • Missing relationship models
  • Invalid field configurations
  • Validation failures

Always wrap API calls in try-catch blocks when using in production:

try {
$modelData = User::getModel();
} catch (\Exception $e) {
// Handle error appropriately
Log::error('Failed to get model data', ['error' => $e->getMessage()]);
}