Laravel Soft Elimina post

nel nostro progetto dobbiamo usare soft delete per each post. nel documento di laravel penso che possiamo usare questa function solo per le tabelle.

possiamo usarlo per i messaggi sul tavolo come

$id = Contents::find( $id ); $id->softDeletes(); 

Quando si elimina un model, l'eliminazione non viene effettivamente rimossa dal database. Invece, un timestamp deleted_at è impostato sul record. Per abilitare le eliminazioni software per un model, specificare la properties; softDelete sul model ( Documentazione ):

Prima della versione 4.2 (ma non 4.2 e successive)

Ad esempio (utilizzando una tabella di posts e un model di Post ):

 class Post extends Eloquent { protected $table = 'posts'; protected $softDelete = true; // ... } 

Per aggiungere una colonna deleted_at alla tabella, è ansible utilizzare il metodo softDeletes da una migrazione:

Ad esempio (metodo up class Migration per la tabella dei posts ):

 /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function(Blueprint $table) { $table->increments('id'); // more fields $table->softDeletes(); // <-- This will add a deleted_at field $table->timeStamps(); }); } 

Ora, quando si chiama il metodo delete sul model, la colonna deleted_at verrà impostata sul timestamp corrente. Quando si esegue una query su un model che utilizza eliminazioni software, i templates "eliminati" non verranno inclusi nei risultati della query. Per soft delete un model è ansible utilizzare:

 $model = Contents::find( $id ); $model->delete(); 

I templates eliminati (soft) sono identificati dal timestamp e se il field deleted_at è NULL , non viene eliminato e l'utilizzo del metodo di restore rende in realtà il field deleted_at NULL . Per eliminare definitivamente un model, utilizzare il metodo forceDelete .

Versione aggiornata ( versione 4.2 ):

 use Illuminate\Database\Eloquent\SoftDeletingTrait; // <-- This is required class Post extends Eloquent { use SoftDeletingTrait; // <-- Use This Insteaf Of protected $softDelete = true; protected $table = 'posts'; // ... } 

Versione aggiornata ( versione 5.0 e successive ):

 use Illuminate\Database\Eloquent\SoftDeletes; // <-- This is required class Post extends Eloquent { use SoftDeletes; // <-- Use This Instead Of SoftDeletingTrait protected $table = 'posts'; // ... } 

Effettui effettivamente la cancellazione normale. Ma sul model si specifica che è un model softdelete.

Quindi sul tuo model aggiungi il codice:

 class Contents extends Eloquent { use SoftDeletingTrait; protected $dates = ['deleted_at']; } 

Quindi sul tuo codice fai la cancellazione normale come:

 $id = Contents::find( $id ); $id ->delete(); 

Assicurati inoltre di avere la colonna deleted_at sul tuo tavolo.

Oppure guarda i documenti: http://laravel.com/docs/eloquent#soft-deleting

Solo un aggiornamento per Laravel 5:

In Laravel 4.2:

 use Illuminate\Database\Eloquent\SoftDeletingTrait; class Post extends Eloquent { use SoftDeletingTrait; protected $dates = ['deleted_at']; } 

diventa in Laravel 5:

 use Illuminate\Database\Eloquent\SoftDeletes; class User extends Model { use SoftDeletes; protected $dates = ['deleted_at']; 

Ecco i dettagli di laravel.com

http://laravel.com/docs/eloquent#soft-deleting

Quando si elimina un model, l'eliminazione non viene effettivamente rimossa dal database. Invece, un timestamp deleted_at è impostato sul record. Per abilitare le eliminazioni softDelete per un model, specificare la properties; softDelete sul model:

 class User extends Eloquent { protected $softDelete = true; } 

Per aggiungere una colonna deleted_at alla tabella, è ansible utilizzare il metodo softDeletes da una migrazione:

 $table->softDeletes(); 

Ora, quando si chiama il metodo delete sul model, la colonna deleted_at verrà impostata sul timestamp corrente. Quando si esegue una query su un model che utilizza eliminazioni software, i templates "eliminati" non verranno inclusi nei risultati della query.