web-dev-qa-db-fra.com

Tronquer une table en Laravel 5

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é!

26
kyo

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();
40
Bogdan

les éléments suivants devraient également fonctionner,

Visitor::truncate();

38
nasirkhan

À partir des documents Laravel

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();

18
Ryan

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();
2
itz_nsn