2017-09-03 137 views
0

这是我的模型:使用软删除laravel 5问题

$imageFile = ImageModel::where('id', 12)->first(); 

$imageFile是:

namespace App\Models\Admin; 

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

class Image extends Model 
{ 
    use SoftDeletes; 
    //table 
    protected $table = 'images'; 
} 

如果添加我的特质,如果我用我的模型这样我无法找到任何记录总是null,如果我删除我的特质正在工作。为什么?

+0

图像#12被删除?如果是这样,你应该使用'Image :: withTrashed() - > where('id',12') - > first();'。 – Bytewave

+0

事实并非如此。正如我所说如果我删除这部分'使用SoftDeletes;'从我的模式正在工作。我从'ImageModel :: where('id',12) - > first();'获取数据。如果我保留,它是空的。 – Chester

+0

用软删除删除意味着'deleted_at'字段不为空。 – Dmitry

回答

1

从你所说的,它按预期工作。在Laravel中使用软删除特性时,不会从数据库中删除该模型。将模型传递给destroy()时,唯一发生的情况是deleted_at字段变为非null。

如果你更深入Laravel的代码,当你调用

ImageModel::where('id', 12)->first(); 

的softdelete特点是增加

where null 

到SQL的deleted_at列。这就意味着,正如你所说的,如果关闭特质,$ imageFile不会为空(它正在工作)。因为softdelete从未从数据库中删除模型 - 它只是为该模型的数据库添加了非空值,因此对于正常的laravel查询是可见的:当您不使用softdeletes时,Laravel不关心deleted_at字段,以便查看模型。当您打开软删除项时,它只会查找空值,并且由于您的模型已被软删除(它具有非空值),因此它会将$ imageFile返回为null。

正如bytewave说,正确使用softdeletes有来无回空值$镜像文件,你需要在softdeleted模型添加到您的查询,像这样:

Image::withTrashed()->where('id', 12')->first(); 

我认为你正在寻找略有不同的功能(回滚),这与softdelete特性的意图有点不同。该手册非常好:5.4 soft-deletes,但深入研究特征代码也可能有帮助。

查看 - > restore()函数 - 这可能会帮助您更接近您正在寻找的预期回滚。但是,首先需要逻辑预先知道哪些被删除。