Eloquent is een van de meest geliefde features van Laravel. Het maakt database-interacties intuitief en leesbaar. Maar Eloquent kan ook een bron van performanceproblemen zijn als je er onzorgvuldig mee omgaat. Deze tien tips helpen je efficiënter te werken.

1. Eager loading — vermijd het N+1 probleem

Het N+1 probleem is de meest voorkomende Eloquent-valkuil. Stel je laadt 100 posts en voor elk een query de auteur op — dat zijn 101 queries.

// Fout: N+1 queries
$posts = Post::all();
foreach ($posts as $post) {
    echo $post->author->name; // Extra query per post!
}

// Goed: eager loading
$posts = Post::with('author')->get();

2. Selecteer alleen de kolommen die je nodig hebt

// Vermijd: laadt alle kolommen
User::all();

// Beter: alleen naam en email
User::select('name', 'email')->get();

3. Gebruik query scopes voor herbruikbare filters

// In je model
public function scopeActive($query)
{
    return $query->where('status', 'active');
}

// Gebruik
User::active()->get();

4. Chunk grote datasets

// Vermijd: 100.000 records in geheugen laden
User::all()->each(function ($user) { /* ... */ });

// Beter: chunks van 500
User::chunk(500, function ($users) {
    foreach ($users as $user) { /* ... */ }
});

5. Gebruik whereHas slim

// Gebruikers met minstens één actieve order
User::whereHas('orders', function ($query) {
    $query->where('status', 'active');
})->get();

6. Cache frequente queries

$users = Cache::remember('active-users', 3600, function () {
    return User::active()->get();
});

7. Gebruik withCount voor tellen

// Laad het aantal orders mee zonder extra query
$users = User::withCount('orders')->get();
echo $users->first()->orders_count;

8. Lazy loading via lazy collections

// Verwerkt één record tegelijk, laag geheugengebruik
User::lazy()->each(function ($user) { /* ... */ });

9. Raw queries voor complexe berekeningen

Soms is een raw query eenvoudiger en performanter:

$result = DB::select('SELECT AVG(price) as avg_price FROM products WHERE category_id = ?', [$categoryId]);

10. Query logging inschakelen tijdens development

DB::enableQueryLog();
// ... je code
dd(DB::getQueryLog()); // Bekijk alle queries

Of gebruik Laravel Telescope voor een visueel overzicht van alle queries per request.

Bij Meesy bouwen we Laravel applicaties die ook op schaal performant blijven. Database-optimalisatie is een standaardonderdeel van ons ontwikkelproces, niet een afterthought. Neem contact op voor meer informatie.

Conclusie

Eloquent is krachtig, maar vraagt bewuste omgang. Vermijd N+1 queries, selecteer alleen wat je nodig hebt, cache waar nuttig, en gebruik chunk voor grote datasets. Met deze tien tips hou je je applicatie snel en je database gelukkig.

Heb je vragen over dit onderwerp of wil je samenwerken?

Neem contact op