5 Laravel Eloquent tips
Development Laravel

5 Laravel Eloquent tips

Laravel Eloquent is enorm handig als het gaat om het ophalen en verwerken van data. Echter zijn er handigheidjes die niet iedereen weet. In deze blogpost geef ik 5 voorbeelden van minder bekende maar toch erg handige functies binnen Laravel’s Eloquent.

Meerdere records zoeken met Find

Iedereen kent de find() methode wel. Deze wordt gebruikt om een enkel object op te halen:

$record = Model::find(1);

Wat niet iedereen weet is dat de find() methode ook gewoon overweg kan met merdere ID’s.

$records = Model::find([1,2,3]);

Door een array als parameter mee te geven krijg je niet meer een enkel model object terug maar een collectie. Dit geldt dus ook als je maar een id mee geeft binnen de array

Magic where

Je kan de kolom namen mee geven in de where() methode zoals altijd:

$record = Model::where('published', true)->get();

Wat ook kan is de kolomnaam mee geven in de naam van de methode zelf:

$record = Model::wherePublished(true)->get();

Je kan de naam vervangen met elk ander veld en het achter de where() methode zetten en Laravel zorgt dat automatisch het juiste veld wordt opgehaald.

Model boot() method

Met behulp van de model boot() methode is het mogelijk om het standaard gedrag van je model te overschrijven.

class Record extends Model
{
    public static function boot()
    {
        parent::boot();
        static::updating(function($model)
        {
            // Log bijvoorbeeld het ID tijdens het updaten 
            logger($model->id);
            
            // Of overschrijf een waarde
            $model->slug = str_slug($model->title);
        });
    }
}

Increment en Decrement

Als je een waarde wilt verhogen of verlagen kan je dat op een simpele manier doen. In plaats van het ophalen, bijwerken en opslaan:

$record = Model::find($record_id);
$record->read_count++;
$record->save();

Kan je het ook op een enkele regel doen

$record = Model::find($record_id)->increment('read_count');

Met de increment() methode zal de waarde van de opgegeven kolom met 1 omhoog gaan, met de decrement() methode zal de waarde van de opgegeven kolom met 1 omlaag gaan. Increment en Decrement kunnen ook een tweede parameter krijgen. Hiermee is het mogelijk om in plaats van 1 bijvoorbeeld met 10 omhoog of naar beneden te gaan:

$record = Model::find($record_id)->increment('read_count', 10);

Global scopes

Wat als je altijd alle records van je model op bijvoorbeeld naam wilt sorteren. Wat je kan doen is een global scope toevoegen. Met behulp van de boot() methode waar we het hierboven al over hebben gehad kan je een global scope toevoegen aan je model.

public static function boot()
{
    parent::boot();

    // Order by name ASC
    static::addGlobalScope('order', function (Builder $builder) {
        $builder->orderBy('name', 'asc');
    });
}