в нашем проекте мы должны использовать soft delete для каждого сообщения. в laravel документе я думаю, что мы можем использовать эту функцию только для таблиц.
мы можем использовать это для сообщений на таблице, таких как
$id = Contents::find( $id ); $id->softDeletes();
При мягком удалении модели она фактически не удаляется из вашей базы данных. Вместо этого в записи устанавливается временная метка deleted_at. Чтобы включить мягкие удаления для модели, укажите свойство softDelete в модели ( Documentation ):
Например (использование таблицы posts и модели Post ):
class Post extends Eloquent { protected $table = 'posts'; protected $softDelete = true; // ... }
Чтобы добавить столбец deleted_at в таблицу, вы можете использовать метод softDeletes из миграции:
Например (метод класса «Тип миграции» для таблицы 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(); }); }
Теперь, когда вы вызываете метод delete на модели, столбец deleted_at будет установлен на текущую deleted_at timestamp . При запросе модели, использующей мягкие удаления, «удаленные» модели не будут включены в результаты запроса. Чтобы soft delete модель, вы можете использовать:
$model = Contents::find( $id ); $model->delete();
Удаленные (мягкие) модели идентифицируются по timestamp и если поле deleted_at равно NULL то оно не удаляется и использование метода restore фактически делает поле deleted_at NULL . Чтобы навсегда удалить модель, используйте метод 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'; // ... }
Фактически вы делаете обычное удаление. Но на модели вы указываете, что ее модель softdelete.
Итак, на вашей модели добавьте код:
class Contents extends Eloquent { use SoftDeletingTrait; protected $dates = ['deleted_at']; }
Затем на вашем коде выполните обычное удаление, например:
$id = Contents::find( $id ); $id ->delete();
Также убедитесь, что у вас есть столбец deleted_at на вашей таблице.
Или просто просмотрите документы: http://laravel.com/docs/eloquent#soft-deleting
Просто обновление для Laravel 5:
В Laravel 4.2:
use Illuminate\Database\Eloquent\SoftDeletingTrait; class Post extends Eloquent { use SoftDeletingTrait; protected $dates = ['deleted_at']; }
становится в Laravel 5:
use Illuminate\Database\Eloquent\SoftDeletes; class User extends Model { use SoftDeletes; protected $dates = ['deleted_at'];
Вот подробности от laravel.com
http://laravel.com/docs/eloquent#soft-deleting
При мягком удалении модели она фактически не удаляется из вашей базы данных. Вместо этого в записи устанавливается временная метка deleted_at. Чтобы включить мягкие удаления для модели, укажите свойство softDelete в модели:
class User extends Eloquent { protected $softDelete = true; }
Чтобы добавить столбец deleted_at в таблицу, вы можете использовать метод softDeletes из миграции:
$table->softDeletes();
Теперь, когда вы вызываете метод delete на модели, столбец deleted_at будет установлен на текущую временную метку. При запросе модели, использующей мягкие удаления, «удаленные» модели не будут включены в результаты запроса.