Laravel мягкое удаление сообщений



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



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



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

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_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 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

    Ничего не найдено.