Laravel: Мягкое удаление элемента

Я хотел бы удалить элемент только на моей странице «Обзор», однако я хочу сохранить этот элемент в своей базе данных. Является ли это возможным ?

Вы имеете представление о процедуре?

Я не знаю, как сделать softdelete, в моем контроллере есть это

public function destroy(Devis $devis)
     {
         $devis->delete();
         return redirect('/admin');
     }

В моем маршруте у меня есть это

Route::group(['middleware' => ['auth']], function () {
    Route::get('/admin', 'AdminController@getHome');
    Route::get('/valider/{devis}', 'AdminController@destroy');
});

В моем обзоре файлов у меня есть это

@foreach($devis as $item)
                <tr>
                   <td> {{$item->firstname}}</td>
                   <td> {{$item->lastname}} </td>
                   <td> {{$item->phone}} </td>
                   <td> {{$item->start_adress}} --  {{$item->start_floor}}</td>
                   <td> {{$item->end_adress}} --  {{$item->end_floor}}</td>
                   <td> {{$item->type_intervention}}</td>
                   <td> {{$item->email}} </td>
                   <td> {{$item->remarks}} </td>
                   <td> <a href="/valider/{{$item->id}}" class="btn btn-danger"><span class="left ion-close"></span></a></td>
                </tr>
              @endforeach

person anais_stem    schedule 07.11.2018    source источник
comment
вот отличное объяснение: stackoverflow.com/questions/22426165/laravel- мягкое удаление сообщений   -  person Naveed Ali    schedule 07.11.2018
comment
Попробуйте использовать Google, прежде чем спрашивать о SO, если вы не понимаете, как это работает, и вам нужно другое объяснение. Не просто задавайте свои вопросы без поиска в Google.   -  person killstreet    schedule 08.11.2018


Ответы (6)


В Laravel это уже выглядело здесь, поэтому вы добавляете delete_at в свою модель и в документы сказал, что ваша модель похожа:

  namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];
}

person sharif854    schedule 07.11.2018

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

В Laravel 5 или более поздней версии, если у вас есть, например, модель Book, чтобы включить ее, вам необходимо:

<сильный>1. Создайте новую миграцию

 $ php artisan make:migration add_soft_delete_to_books --table=books

<сильный>2. Измените миграцию, добавив столбец «deleted_at». Конструктор схемы Laravel содержит вспомогательный метод softDeletes() для создания этого столбца.

public function up()
{
     Schema::table('books', function(Blueprint $table){
        $table->softDeletes();
    });
 }

public function down()
{
    Schema::table('books', function(Blueprint $table){
        $table->dropColumn('deleted_at');
    });
}

3) Запустите миграцию

$ php artisan migrate

4) Откройте модель книги и добавьте трейт SoftDelete.

<?php 
    namespace App;
    use Illuminate\Database\Eloquent\Model;
     use Illuminate\Database\Eloquent\SoftDeletes;

 class Book extends Model {  
    use SoftDeletes;  
    protected $dates = ['deleted_at'];  
}  

5) В следующий раз, когда вы удалите запись, связанную с этой моделью, в столбцеDeleted_at будет установлена ​​текущая отметка времени.

Любая запись с установленной временной меткой delete_at не будет включена ни в какие извлекаемые результаты. 6) Если вам нужно включить мягко удаленную запись в результат любого красноречивого запроса, вы можете использовать метод withTrashed:

$Books = Book::withTrashed()->get();

Здесь вы найдете официальную документацию:

person Davide Casiraghi    schedule 13.02.2019

Когда вы хотите мягко удалить, на самом деле вам нужен флаг. Допустим, в вашей таблице есть столбец deleted, который принимает логические значения.

Когда вы извлекаете данные в своем контроллере, чтобы передать их в представление, вы запрашиваете таблицу, которую вы только что добавили в свой запрос с предложением where, например:

->where('deleted',0)

Таким образом, вы получаете «неудаленные» элементы.

Теперь, когда вы хотите выполнить softdelete, на самом деле вы не удаляете, а обновляете свой столбец, чтобы установить его статус на 1.

person pr1nc3    schedule 07.11.2018

Используйте это: мягкое удаление документации позже добавьте в условия загрузки элементов

->whereNull('deleted_at')
person Mateusz Czerwiński    schedule 07.11.2018

В Laravel есть собственная реализация мягкого удаления. Просто добавьте use SoftDeletes к своей модели, и она начнет работать. Попробуйте прочитать Eloquent — мягкое удаление, чтобы узнать больше об этом и его влиянии на вашу код.

person Maaike Brouwer    schedule 07.11.2018

Вы должны добавить поле в soft delete при создании таблицы. Лучше всего мигрировать. Если это так и вы будете использовать soft delete, то:

$ item-> delete () - will be softdelete

$ item-> forcedelete () - will permanently delete
person Łukasz Matejka    schedule 07.11.2018