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