Serialization for Eloquent's QueryBuilder
Published on by Paul Redmond
Eloquent Serialize is a Laravel package to serialize and unserialize Eloquent query builder objects. The EloquentSerialize
service has two methods, serialize
and unserialize
.
Given the following simple query, you can serialize the builder results:
$data = \EloquentSerialize::serialize( App\Models\Post::with('author')->limit(1)); // => "O:36:"AnourValar\EloquentSerialize\Package":1:{s:42:"\0AnourValar\EloquentSerialize\Package\0data";a:4:{s:5:"model";s:15:"App\Models\Post";s:10:"connection";N;s:8:"eloquent";a:3:{s:4:"with";a:1:{s:6:"author";a:16:{s:8:"bindings";a:9:{s:6:"select";a:0:{}s:4:"from";a:0:{}s:4:"join";a:0:{}s:5:"where";a:0:{}s:7:"groupBy";a:0:{}s:6:"having";a:0:{}s:5:"order";a:0:{}s:5:"union";a:0:{}s:10:"unionOrder";a:0:{}}...
From serialized data, you can get back an Eloquent builder instance:
\EloquentSerialize::unserialize($data)->get(); foreach ($builder->get() as $item) { // ...} /*=> Illuminate\Database\Eloquent\Collection {#4430 all: [ App\Models\Post {#4423 id: 1, author_id: 1, title: "Hello World", body: "This is a test post.", created_at: "2021-10-05 04:14:31", updated_at: "2021-10-05 04:14:31", author: App\Models\Author {#3483 id: 1, name: "Paul Redmond", created_at: "2021-10-05 04:13:36", updated_at: "2021-10-05 04:13:36", }, }, ],*/
This package could be helpful if you need to cache or store a query for users as serialized data and later need to retrieve the results back into an Eloquent builder object.
You can learn more about this package, get full installation instructions, and view the source code on GitHub.