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.