Hello bro! Now I will introduce to everyone the maatwebsite library to handle the export of excel file in any laravel project and start creating test project.
Install project laravel
Go to the forder want to place the project and run the following command to create a prj laravel project name is excel offline. If the ‘Permission’ error then run with sudo privileges is fine.
$ composer create-project --prefer-dist laravel/laravel excel
Then create the DB and edit the .env file to connect the DB
1 2 3 4 5 6 7 | DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=excel DB_USERNAME=root DB_PASSWORD= |
Run command to generate key
$ php artisan key:generate
Run migrate to create a user table
$ php artisan migrate
So finished project laravel, next we create the sample data for the user table to test their export again offline.
Step 1: Create a new seeder for the users table named UsersTableSeeder.php
$ php artisan make:seeder UsersTableSeeder
Step 2: We now have a UsersTableSeeder.php file in the database / seeds / directory. In the function we will add the command to run the factory
factory(User::class, 100)->create();
and remember to use the User model. The complete UsersTableSeeder.php will look like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">use</span> <span class="token package">Illuminate Database Seeder</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App User</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">UsersTableSeeder</span> <span class="token keyword">extends</span> <span class="token class-name">Seeder</span> <span class="token punctuation">{</span> <span class="token comment">/** * Run the database seeds. * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">run</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">factory</span> <span class="token punctuation">(</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token number">100</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
Next, register the UsersTableSeeder seed in the DatabaseSeeder.php file, the DatabaseSeeder.php file, complete as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">use</span> <span class="token package">Illuminate Database Seeder</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">DatabaseSeeder</span> <span class="token keyword">extends</span> <span class="token class-name">Seeder</span> <span class="token punctuation">{</span> <span class="token comment">/** * Seed the application's database. * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">run</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">call</span> <span class="token punctuation">(</span> Users <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
Done, now we run the command: php artisan db:seed
into the test db will have 100 sample records in the user table, now we start testing export offline.
Install maatwebsite library
run the following command to install the composer require maatwebsite/excel
library Run the following command to pulish config php artisan vendor:publish --provider="MaatwebsiteExcelExcelServiceProvider"
Export
- Create a route so that when this route is called, it will export to
Route::get('export', ' [email protected] ')->name('export');
- Create Controller
php artisan make:controller ExportController
- Running the command below, I created a file named UsersExport to handle the export of
php artisan make:export UsersExport --model=User
- After running the above command, it will create the UsersExport.php file in App Exports UserExport.php, Modify the file as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <span class="token keyword">namespace</span> <span class="token package">App Exports</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App User</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Maatwebsite Excel Concerns FromCollection</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Maatwebsite Excel Concerns WithHeadings</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Maatwebsite Excel Concerns WithMapping</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">UsersExport</span> <span class="token keyword">implements</span> <span class="token class-name">FromCollection</span> <span class="token punctuation">,</span> WithHeadings <span class="token punctuation">,</span> WithMapping <span class="token punctuation">{</span> <span class="token comment">/** * @return IlluminateSupportCollection */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">collection</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * Returns headers for report * @return array */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">headings</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token keyword">array</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'ID'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Name'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Email'</span> <span class="token punctuation">,</span> <span class="token double-quoted-string string">"Created"</span> <span class="token punctuation">,</span> <span class="token double-quoted-string string">"Updated"</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">map</span> <span class="token punctuation">(</span> <span class="token variable">$user</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token keyword">array</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">,</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">name</span> <span class="token punctuation">,</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">email</span> <span class="token punctuation">,</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">created_at</span> <span class="token punctuation">,</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">updated_at</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Explain the file above
- I use App User to use Eloquent in Laravel,
- Use Maatwebsite Excel’s class to use the export function
- Headings () function: create column headings
- Map function ($ user): map the values to output with the heading
- Next, we will install in the Controller file so we can use the UsersExport.php file, use App UsersExport to select UserController.php.
- Next fix the controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Controllers</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Exports UsersExport</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Maatwebsite Excel Facades Excel</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">ExportController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">export</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Excel <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">download</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">UsersExport</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'users.xlsx'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
That’s it, access to the path created above we will export a file users.xlsx then, you can change the output file format to users.csv or tsv. Thanks mn for interest )!