Exotosche Laravel Eloqent functies

Exotosche Laravel Eloqent functies
published 20-09-2025

Artikel met exotische Laravel Eloqent functies.... nou ja, functies die ik niet vaak zie of nieuw zijn in Laravel.

whereAny

Where statements 'nesten'

User::where('name', 'like', '%John%')
   ->orWhere('email', 'like', '%John%')
	->get();

Naar

User::whereAny(['name', 'email'], 'like', '%John%')
	->get();

WhereAll

Alle kolommen moeten voldoen, om bijvoorbeeld alle laptops te selecteren.

Product::whereAny(['name', 'description', 'sku'], 'like', '%laptop%')
	->get();

Tegenovergestelde, whereNone

Als alle kolommen niet voorkomen, bijvoorbeeld actieve orders.

Orders::whereNone(['status', 'quality_check', 'shipping_status'], '=', 'blocked')
	->get();

whereColumn

Alle orders ophalen die niet genoeg voorraad hebben

 Orders::whereColumn('quantity_ordered', '>', 'quantity_in_stock')
   ->get();

Je kan ook arrays gebruiken, bijvoorbeeld haal alle orders op die niet in de aanbieding zijn en niet genoeg voorraad hebben.

Orders::whereColumn([
       ['selling_price', '=', 'discount_price'],
       ['quantity_ordered', '>', 'quantity_in_stock']
   ])->get()

Of juist wel orders in de aanbieding, en niet genoeg voorraad.

Orders::whereColumn([
    ['selling_price', '>', 'discount_price'],     
    ['quantity_ordered', '>', 'quantity_in_stock']
])->get()

whereJsonContains

Zoeken in een Json kolom

User::whereJsonContains('roles', 'admin')->get();

Zoeken in een json kolom op json/string lengte

Product::whereJsonLength('tags', 3)->get();

Full-text search (MySQL/PostgreSQL)

Product::whereFullText(['title', 'content'], 'laptop')->get();

Dit is vaak sneller met grote hoeveelheden records om doorheen te zoeken dan met een where like statement. Uiteraard moet je nog wel een ->fullText() index zetten in je migratie, https://laravel.com/docs/12.x/migrations#available-index-types


whereBetweenColumns

Zoeken tussen een range, in plaats van hardcoded waardes met whereBetween kan je ook kolommen nemen als array params. Bijvoorbeeld alle producten ophalen die niet aan het minimum voorraad voldoen.

Products::whereBetweenColumns('stock', ['min_stock', 'max_stock'])->get();

latest() & oldest()

Order::latest('shipped_at')->get();

withWhereHas()

Haalt gebruikers met actieve orders + hun actieve orders.

User::withWhereHas('orders', function ($query) {
    $query->where('status', 'active');
})->get();

Bulk insert/update

Visit::updateOrCreate(
    ['ip_address' => request()->ip()],
    ['last_visit' => now()]
);

DB::table('flights')->upsert(
    [
        ['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
        ['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
    ],
    ['departure', 'destination'],  // unieke sleutels
    ['price']                      // kolommen om te updaten
);
User::upsert([
    ['email' => 'john@example.com', 'name' => 'John'],
    ['email' => 'jane@example.com', 'name' => 'Jane']
], ['email'], ['name']);

De email is de unieke key/sleutel en name de data die toegoevoegd of bijgewerkt moet worden.

Functie Doel Werking
insert() Bulk insert meerdere rijen Inserts zonder events, faalt bij conflicts
insertOrIgnore() Bulk insert, negeert duplicates Inserts en negeert duplicate errors
updateOrInsert() Update of insert één record Update als bestaat, anders insert
upsert() Bulk update of insert (insert or update batch) Bulk upsert op basis van unieke kolom
create() Eloquent per record insert met events en validatie Insert met model events, niet bulk

CSV of XML

Om CSV of XML data data met bulk toe te voegen kan je uiteraard ook de insert functie van Laravel gebruiken maar je zou nog steeds de data moeten parsen naar een array. Een betere en veel snellere manier is de mysql functie LOAD DATA INFILE te gebruiken.

Webbouwplus

Marcel van Doornen - Laravel Freelance developer
Marcel van Doornen, freelance Laravel developer. Ben je benieuwd hoe ik jou kan helpen?
Neem contact met mij op
©2025 Webbouw Plus