Blog Detail

03

Feb
Inspect Laravel Eloquent Models with Eloquent Inspector cover image

arrow_back Inspect Laravel Eloquent Models with Eloquent Inspector

Eloquent Inspector is a package introduced by Andrea Marco Sartori that can be used to inspect Laravel Eloquent models to collect properties, relationships, and many more.

Installation

You can install this package via Composer by running this command.

composer require cerbero/eloquent-inspector

Usage

To inspect an Eloquent model, we can simply pass its class name to the inspect() method:

use App\Models\User;
use Cerbero\EloquentInspector\Inspector;

$inspector = Inspector::inspect(User::class);

An Inspector singleton is created every time a new model is inspected, this lets us inspect the same model multiple times while running the inspection logic only once.

If we need to free memory or cleanup some inspected model information, we can either flush all model inspections, flush only one model inspection or tell an inspection to forget its data:

// flush information of all inspected models
Inspector::flush();

// flush information of an inspected model
Inspector::flush(User::class);

// forget information of the current inspection
Inspector::inspect(User::class)->forget();

To retrieve the class of the inspected model from an Inspector, we can call getModel():

$model = Inspector::inspect(User::class)->getModel(); // App\Models\User

The method getUseStatements() returns an array with all the use statements of a model, keyed by either the class name or the alias:

use Illuminate\Database\Eloquent\Model;
use Foo\Bar as Baz;

class User extends Model
{
    // ...
}

$useStatements = Inspector::inspect(User::class)->getUseStatements();
/*
[
    'Model' => 'Illuminate\Database\Eloquent\Model',
    'Baz' => 'Foo\Bar',
]
*/

Calling getProperties() performs a scan of the model database table and returns an array of Property instances containing the properties information. The array is keyed by the properties name:

$properties = Inspector::inspect(User::class)->getProperties();
/*
[
    'id' => <Cerbero\EloquentInspector\Dtos\Property>,
    'name' => <Cerbero\EloquentInspector\Dtos\Property>,
    ...
]
*/

$properties['id']->name; // id
$properties['id']->type; // int
$properties['id']->dbType; // integer
$properties['id']->nullable; // false
$properties['id']->default; // null

To inspect the relationships of a model, we can call the method getRelationships(). The result is an array of Relationship instances, keyed by the relationship name, containing all the relationships information:

$relationships = Inspector::inspect(User::class)->getRelationships();
/*
[
    'posts' => <Cerbero\EloquentInspector\Dtos\Relationship>,
    'tags' => <Cerbero\EloquentInspector\Dtos\Relationship>,
    ...
]
*/

$relationships['posts']->name; // posts
$relationships['posts']->type; // hasMany
$relationships['posts']->class; // Illuminate\Database\Eloquent\Relations\HasMany
$relationships['posts']->model; // App\Models\Post
$relationships['posts']->relatesToMany; // true

You can visit Github, for more details about this package and get the source code.

Published at : 03-02-2022

Author : Rizwan Aslam
AUTHOR
Rizwan Aslam

I am a highly results-driven professional with 12+ years of collective experience in the grounds of web application development especially in laravel, native android application development in java, and desktop application development in the dot net framework. Now managing a team of expert developers at Codebrisk.

Launch your project

Launch project