代码之家  ›  专栏  ›  技术社区  ›  Attila Naghi

在laravel 5版本中使用软删除

  •  0
  • Attila Naghi  · 技术社区  · 7 年前

    namespace App\Models\Admin;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class Image extends Model
    {
        use SoftDeletes;
        //table
        protected $table = 'images';
    }
    

    如果我添加我的特征,如果我这样使用我的模型,我找不到任何记录:

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

    这个 $imageFile null

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    4 年前

    从你所说的来看,它正在按预期工作。在Laravel中使用软删除特征时,不会从数据库中删除模型。当您将模型传递给destroy()时,唯一发生的事情是deleted\u at字段变为非null。

    如果你深入研究拉雷维尔的代码

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

    softdelete特性正在添加

    where null
    

    正如bytewave所说,为了正确使用softdeletes以不将空值返回到$imageFile,您需要将softdeleted模型添加到查询中,如下所示:

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

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