Laravel мягкое удаление сообщений
В нашем проекте мы должны использовать мягкое удаление для каждого сообщения. в документе laravel я думаю, что мы можем использовать эту функцию только для таблиц.
Можем ли мы использовать это для записей в таблице, таких как
$id = Contents::find( $id );
$id->softDeletes();
5 ответов:
При мягком удалении модели она фактически не удаляется с Вашего компьютера. база данных. Вместо этого на записи устанавливается отметка времени deleted_at. К включить мягкое удаление для модели, указать свойство softDelete на модель (документация) :
До версии 4.2 (но не 4.2 и позже)
Например (используя таблицу
postsи модельPost):class Post extends Eloquent { protected $table = 'posts'; protected $softDelete = true; // ... }Чтобы добавить столбец deleted_at в таблицу, можно использовать softDeletes метод из миграции:
Например (класс миграции'
upметод для таблицы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будет установлен в текущийtimestamp. При запросе модели, использующей мягкие удаления," удаленные " модели не будут включены в результаты запроса. Дляsoft deleteмодели вы можете использовать:$model = Contents::find( $id ); $model->delete();Удаленные (мягкие) модели идентифицируются полем
timestamp, и если полеdeleted_atравноNULL, то это не так. удалено и с помощью методаrestoreфактически создает полеdeleted_atNULL. Для окончательного удаления модели используйте метод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 5.5 мягкие удаленные работы (для меня).
База Данных
deleted_at поле, по умолчанию NULL value
Модель
use Illuminate\Database\Eloquent\SoftDeletes; class User extends Model { use SoftDeletes; }Контроллер
public function destroy($id) { User::find($id)->delete(); }
Вот подробности из 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 будет установлен на текущую метку времени. При запросе модели, использующей мягкие удаления," удаленные " модели не будут включены в результаты запроса.
Comments