Подтвердить что ты не робот

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

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

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

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

Ответ 1

При мягком удалении модели она фактически не удаляется из вашего база данных. Вместо этого в записи устанавливается временная метка 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';

    // ...
}

Ответ 2

Фактически вы делаете обычное удаление. Но на модели вы указываете, что ее модель 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

Ответ 3

Просто обновление для 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'];

Ответ 4

В Laravel 5.5 Soft Deleted работает (для меня).

База данных

deleted_at Поле, значение по умолчанию NULL

Model

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model {
    use SoftDeletes;
}

контроллер

public function destroy($id)
{
    User::find($id)->delete();
}

Ответ 5

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