Laravel: 软删除一个项目
Laravel: Soft Delete an item
我只想删除我页面上的项目 "overview" 但是我希望将该元素保留在我的数据库中。可能吗?
你知道这个过程吗?
我不知道如何进行软删除,在我的控制器中我有那个
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
当你想软删除实际上你需要一个标志。假设在您的 table 中有一列 deleted 接受布尔值。
当您在控制器中检索数据以将其传递给视图时,您将查询 table 您只需在查询中添加一个 where
子句,例如:
->where('deleted',0)
所以你得到了 "undeleted" 项。
现在,当您想要软删除时,实际上您并没有删除,而是更新您的列以将其状态设置为 1。
使用这个:Documentation soft deleting
稍后添加到下载项目的条件
->whereNull('deleted_at')
您必须在创建 table 时向 soft delete
添加一个字段。最好迁移。如果是,您将使用 soft delete
那么:
$ item-> delete () - will be softdelete
$ item-> forcedelete () - will permanently delete
Laravel 有它自己的软删除实现。只需将 use SoftDeletes
添加到您的模型,它就会开始工作。尝试阅读 Eloquent - Soft deletes 以详细了解它及其对您的代码的影响。
Laravel 已经看起来 here 所以你在你的模型中添加 deleted_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'];
}
Using Soft Deletion you mark an item in a way that it's no longer displayed
within the application.
Laravel natively support soft deletion, you just have to enable it on the
specific model where you need it.
在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) 打开Book模型并添加SoftDelete trait
<?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 列将设置为当前时间戳。
任何设置了 deleted_at 时间戳的记录都不会包含在任何检索结果中。
6)如果需要在任何eloquent查询结果中包含软删除记录,可以使用withTrashed方法:
$Books = Book::withTrashed()->get();
你看官方documentation:
1) 为默认用户添加列 table:
`php artisan make:migration add_column_delete_soft --table="user"`(if already migrate)
-在迁移上面添加
$table->SoftDeletes();
-if not migrate then follow this step:
1) add `$table->SoftDeletes()`; in create_user migration then follow below process as same.
2) 输入Model/User.php
-put below package:
use Illuminate\Database\Eloquent\SoftDeletes;
-添加下面一行:
use SoftDeletes;
-在 $fillable 后添加下行:
protected $dates = ['deleted_at'];
3) 在delete方法中添加Controller,如你所愿。
public function delete(Request $request)
{
User::where('email', $request->email)->delete();
}
4) 如果你想 return Null 然后按照下面的步骤:
内部路线:
// 再次软删除数据 null
Route::get('restore/{id}', [AuthController::class, 'restoredata']);
控制器内部:
public function restoredata(Request $request, $id)
{
User::onlyTrashed()->find($id)->restore();
return 'deleted null Successfully';
}
用于从数据库中删除所有数据(不是软删除)
-do in controller
$delete_data = User::where('email', $request->email)->forceDelete();
我只想删除我页面上的项目 "overview" 但是我希望将该元素保留在我的数据库中。可能吗?
你知道这个过程吗?
我不知道如何进行软删除,在我的控制器中我有那个
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
当你想软删除实际上你需要一个标志。假设在您的 table 中有一列 deleted 接受布尔值。
当您在控制器中检索数据以将其传递给视图时,您将查询 table 您只需在查询中添加一个 where
子句,例如:
->where('deleted',0)
所以你得到了 "undeleted" 项。
现在,当您想要软删除时,实际上您并没有删除,而是更新您的列以将其状态设置为 1。
使用这个:Documentation soft deleting 稍后添加到下载项目的条件
->whereNull('deleted_at')
您必须在创建 table 时向 soft delete
添加一个字段。最好迁移。如果是,您将使用 soft delete
那么:
$ item-> delete () - will be softdelete
$ item-> forcedelete () - will permanently delete
Laravel 有它自己的软删除实现。只需将 use SoftDeletes
添加到您的模型,它就会开始工作。尝试阅读 Eloquent - Soft deletes 以详细了解它及其对您的代码的影响。
Laravel 已经看起来 here 所以你在你的模型中添加 deleted_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'];
}
Using Soft Deletion you mark an item in a way that it's no longer displayed within the application. Laravel natively support soft deletion, you just have to enable it on the specific model where you need it.
在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) 打开Book模型并添加SoftDelete trait
<?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 列将设置为当前时间戳。
任何设置了 deleted_at 时间戳的记录都不会包含在任何检索结果中。 6)如果需要在任何eloquent查询结果中包含软删除记录,可以使用withTrashed方法:
$Books = Book::withTrashed()->get();
你看官方documentation:
1) 为默认用户添加列 table:
`php artisan make:migration add_column_delete_soft --table="user"`(if already migrate)
-在迁移上面添加
$table->SoftDeletes();
-if not migrate then follow this step:
1) add `$table->SoftDeletes()`; in create_user migration then follow below process as same.
2) 输入Model/User.php
-put below package:
use Illuminate\Database\Eloquent\SoftDeletes;
-添加下面一行:
use SoftDeletes;
-在 $fillable 后添加下行:
protected $dates = ['deleted_at'];
3) 在delete方法中添加Controller,如你所愿。
public function delete(Request $request)
{
User::where('email', $request->email)->delete();
}
4) 如果你想 return Null 然后按照下面的步骤:
内部路线: // 再次软删除数据 null
Route::get('restore/{id}', [AuthController::class, 'restoredata']);
控制器内部:
public function restoredata(Request $request, $id)
{
User::onlyTrashed()->find($id)->restore();
return 'deleted null Successfully';
}
用于从数据库中删除所有数据(不是软删除)
-do in controller
$delete_data = User::where('email', $request->email)->forceDelete();