📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Laravel Framework Macros

Macros

5 min read
Extend core Laravel classes at runtime with macros on Collection, Response, and Query Builder.

Macros

// Extend core Laravel classes without inheritance
// In AppServiceProvider::boot()

// Extend Collection
Collection::macro("toKeyedArray", function (string $key): array {
    return $this->keyBy($key)->toArray();
});

// Extend Response
Response::macro("success", function ($data, int $code = 200) {
    return Response::json(["success" => true, "data" => $data], $code);
});

Response::macro("error", function (string $msg, int $code = 400) {
    return Response::json(["success" => false, "message" => $msg], $code);
});

// Use
return response()->success($post, 201);
return response()->error("Not found", 404);

// Extend Builder
Builder::macro("whereLike", function (string $col, string $val): Builder {
    return $this->where($col, "LIKE", "%" . $val . "%");
});
Post::whereLike("title", "Laravel")->get();