Truncate a table in Laravel 5
Description : I have a table full of tested data. Sometimes, I want to clear it out for new data. I can perform the truncate in the DBMS App like MySQL WorkBench, but I'm trying to achieve it within my application instead.
Goal : to make a button to truncate a table in a database when on click.
Here are my steps :
1 - Declare a route
Route::delete('visitor/truncate',array('as'=>'visitor.truncate', 'uses'=>'VisitorController@truncate'));
2 - Create a truncate
function in my VisitorController
public function truncate()
{
$visitors = Visitor::all();
$visitors ->truncate();
return View::make('visitors.index')
->with('success', 'Truncate Done');
}
3 - Create a button on my view
{!! Form::model($visitors, array( 'route' => array('visitor.truncate'),'method' => 'DELETE')) !!}
<button type="submit" class="btn bgm-red btn-float waves-effect waves-effect waves-button waves-float"><i class="md md-remove"></i></button>
{!! Form::close()!!}
4 - Test
When I click on it, it get into my truncate()
function in my controller, but I keep getting this error
Call to undefined method Illuminate\Database\Eloquent\Collection::truncate()
Do I need include anything to use truncate()
?
Any hints on that will be much appreciated !
the following should work as well,
Visitor::truncate();
The truncate
method is part of the Query Builder. However Visitor::all()
returns a Collection
instance. You need to build the query using the following:
Visitor::query()->truncate();
From the Laravel Docs
https://laravel.com/docs/5.6/queries#deletes says:
If you wish to truncate the entire table, which will remove all rows and reset the auto-incrementing ID to zero, you may use the
truncate
method:
DB::table('users')->truncate();
Laravel 8.0 docs
https://laravel.com/docs/8.x/queries#delete-statements
With query builder:
DB::table('users')->truncate();
And with model:
User::truncate();