Удалить сообщение

в нашем проекте мы должны использовать soft delete для каждого сообщения. в laravel документе я думаю, что мы можем использовать эту функцию только для таблиц.

мы можем использовать это для сообщений на таблице, таких как

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

При мягком удалении модели она фактически не удаляется из вашей базы данных. Вместо этого в записи устанавливается временная метка deleted_at. Чтобы включить мягкие удаления для модели, укажите свойство softDelete в модели ( Documentation ):

До версии 4.2 (но не 4.2 и более поздних)

Например (использование таблицы 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 .

Обновленная версия ( версия 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'; // ... } 

Обновленная версия ( версия 5.0 и более поздняя ):

 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 будет установлен на текущую временную метку. При запросе модели, использующей мягкие удаления, «удаленные» модели не будут включены в результаты запроса.