Laravel: Soft Удалить объект - PullRequest
0 голосов
/ 07 ноября 2018

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

У вас есть представление о процедуре?

Я не знаю, как сделать 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

Ответы [ 6 ]

0 голосов
/ 13 февраля 2019

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

В Laravel 5 или новее , если у вас есть, например, модель Книга , для ее включения необходимо:

1. Создать новую миграцию

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

2. Измените миграцию, добавив столбец «Удален_кат» . Конструктор схемы 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) Откройте модель Book и добавьте черту 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) При следующем удалении записи, связанной с этой моделью, в столбце dele_at будет установлена ​​текущая отметка времени.

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

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

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

0 голосов
/ 07 ноября 2018

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

  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'];
}
0 голосов
/ 07 ноября 2018

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

0 голосов
/ 07 ноября 2018

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

$ item-> delete () - will be softdelete

$ item-> forcedelete () - will permanently delete
0 голосов
/ 07 ноября 2018

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

->whereNull('deleted_at')
0 голосов
/ 07 ноября 2018

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

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

->where('deleted',0)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...