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 ):
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
.
use Illuminate\Database\Eloquent\SoftDeletingTrait; // <-- This is required class Post extends Eloquent { use SoftDeletingTrait; // <-- Use This Insteaf Of protected $softDelete = true; protected $table = 'posts'; // ... }
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.