Description: J'ai un tableau plein de données testées. Parfois, je veux l'effacer pour de nouvelles données. Je peux effectuer la troncature dans l'application SGBD comme MySQL WorkBench, mais j'essaie de le faire dans mon application à la place.
Objectif: créer un bouton pour tronquer une table dans une base de données lors d'un clic.
Voici mes étapes:
1 - Déclarer un itinéraire
Route::delete('visitor/truncate',array('as'=>'visitor.truncate', 'uses'=>'VisitorController@truncate'));
2 - Créer une fonction truncate
dans mon VisitorController
public function truncate()
{
$visitors = Visitor::all();
$visitors ->truncate();
return View::make('visitors.index')
->with('success', 'Truncate Done');
}
- Créer un bouton sur ma vue
{!! 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
Quand je clique dessus, il entre dans ma fonction truncate()
dans mon contrôleur, mais je continue à recevoir cette erreur
Appel à la méthode non définie Illuminate\Database\Eloquent\Collection :: truncate ()
Dois-je inclure quelque chose pour utiliser truncate()
?
Tout indice à ce sujet sera très apprécié!
La méthode truncate
fait partie du générateur de requêtes. Cependant, Visitor::all()
renvoie une instance Collection
. Vous devez créer la requête à l'aide des éléments suivants:
Visitor::query()->truncate();
les éléments suivants devraient également fonctionner,
Visitor::truncate();
https://laravel.com/docs/5.6/queries#deletes dit:
Si vous souhaitez tronquer la table entière, ce qui supprimera toutes les lignes et remettra à zéro l'ID d'incrémentation automatique, vous pouvez utiliser la méthode
truncate
:
DB::table('users')->truncate();
d'une autre manière si vous n'avez pas de classe modèle pour la table - Laravel 5.4
DB:connection(database connection name)->table(table name)->truncate();