| Install | |
|---|---|
composer require milenmk/laravel-gdpr-exporter |
|
| Latest Version: | 1.3.2 |
| PHP: | ^8.2|^8.3|^8.4 |
A lightweight Livewire component for exporting user data in multiple GDPR-compliant formats: JSON, CSV, XML, and HTML.
_id or _bycomposer require milenmk/laravel-gdpr-exporter
Add the Livewire component in your Blade view:
<livewire:gdpr-exporter />
Optional: Publish the configuration file:
php artisan vendor:publish --tag=laravel-gdpr-exporter-config
Optional: Publish the Blade view if you want to customize the UI:
php artisan vendor:publish --tag=laravel-gdpr-exporter-views
This will publish the file in resources/views/vendor/laravel-gdpr-exporter/livewire/gdpr.blade.php
| Format | Output | Content-Type |
|---|---|---|
| JSON | Pretty-printed user data | application/json |
| CSV | Key-value flat list | text/csv |
| XML | Nested XML document | application/xml |
| HTML | Styled HTML table | text/html |
The package provides several configuration options in config/gdpr-exporter.php:
Specify the user model class to use for GDPR exports:
'user_model' => env('GDPR_USER_MODEL', 'App\Models\User'),
Choose between automatic reflection-based detection or explicit whitelist:
'relations_detection' => [
'method' => env('GDPR_RELATIONS_METHOD', 'whitelist'), // 'reflection' or 'whitelist'
// When using 'whitelist' method, only these relations will be loaded
'whitelist' => [
// Example: 'posts', 'profile', 'roles', 'permissions'
],
// When using 'reflection' method, these methods will be excluded
'excluded_methods' => [
'delete', 'destroy', 'forceDelete', 'restore', 'save',
// ... more methods listed in the config file
],
],
Configure how data is processed during export:
'export' => [
// Whether to remove ID fields from the exported data
'remove_ids' => env('GDPR_REMOVE_IDS', true),
// Whether to flatten pivot table data in the export
'flatten_pivot' => env('GDPR_FLATTEN_PIVOT', true),
],
If you encounter an error like SQLSTATE[42S02]: Base table or view not found: 1146 Table 'notifications' doesn't exist, this happens when your User model uses the Notifiable trait but you don't have the notifications database table (common when using only email notifications).
Solutions:
Use Whitelist Method (Recommended): Configure the package to use the whitelist method and only include the relations you want to export:
// config/gdpr-exporter.php
'relations_detection' => [
'method' => 'whitelist',
'whitelist' => [
'posts', 'profile', 'roles', // Add your actual relations here
// Don't include 'notifications' if you don't have the table
],
],
Exclude Notifications from Reflection: If you prefer using reflection, add 'notifications' to the excluded methods:
// config/gdpr-exporter.php
'relations_detection' => [
'method' => 'reflection',
'excluded_methods' => [
// ... other excluded methods
'notifications', // Add this line
],
],
Create the Notifications Table: If you want to support database notifications in the future:
php artisan notifications:table
php artisan migrate
The package now includes built-in error handling that will gracefully skip relations that cause database errors, but using the whitelist method is still the safest approach.
You can review the source code, report bugs, or contribute to the project by visiting the GitHub repository:
Feel free to open issues or submit pull requests. Contributions are welcome!
Please see CHANGELOG.md for more information on what has changed recently.
If this package saves you time, you can support ongoing development:
👉 Become a Patron
Check out my other Laravel packages:
This package is licensed under the MIT License. See the LICENSE file for more details.
This package is provided "as is", without warranty of any kind, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, or noninfringement.
The author(s) make no guarantees regarding the accuracy, reliability, or completeness of the code, and shall not be held liable for any damages or losses arising from its use.
Please ensure you thoroughly test this package in your environment before deploying it to production.