2017-09-03 3 views
0

を削除使用:ソフトこれは私のモデルであるlaravel 5号に

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、私は私の特性を削除している場合は動作しています。なぜ ???

+0

画像#12は削除されていますか?もしそうなら、 'Image :: withTrashed() - > where( 'id'、12 ') - > first();'を使うべきです。 – Bytewave

+0

それはありません。私が言ったように私がこの部分を削除すると、私のモードから 'use SoftDeletes;'が動作しています。ImageModel :: where( 'id'、12) - > first(); 'からデータを取得しています。私が守っていれば、それはヌルです。 – Chester

+0

ソフト削除で削除された場合、 'deleted_at'フィールドはnullではありません。 – Dmitry

答えて

1

あなたの言ったことから、それは意図したとおりに動作しています。 Laravelでソフト削除属性を使用すると、モデルはDBから削除されません。モデルをdestroy()に渡すと、削除されたフィールドはnull以外になります。

あなたはsoftdelete形質がdeleted_at列のSQLに

where null 

を追加して

ImageModel::where('id', 12)->first(); 
を呼び出すときに、Laravelのコードを深く見てみると。これは、あなたが言ったように、形質を無効にすると、$ imageFileはnullではないことを意味します(それは働いています)。 softdeleteはDBからモデルを削除したことがないので、そのモデルのDBにnull以外の値を追加しただけで、通常のラーベールクエリには表示されます:ソフト削除を使用しない場合、Laravelはモデルが表示されるようにdeleted_atフィールドを追加します。ソフト削除をオンにすると、ヌル値のみが検索され、モデルがソフトデリートされている(null以外の値がある)ため、$ imageFileがnullとして返されます。

bytewaveが言ったように、適切に$画像ファイルにNULL値を返さないためにsoftdeletesを使用するには、そのようなあなたのクエリにsoftdeletedモデルに追加する必要があります:

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

を私はあなたが探していたと思いますわずかに異なる機能(ロールバック)のために、ソフトデリートの特性とは少し異なる。マニュアルはかなり良いです:5.4 soft-deletes、しかし特性コードを深く見ても助けるかもしれません。

- > restore()関数も見てください。これは、探しているロールバックに近づくのに役立ちます。しかし、削除されたものがどれかを知るには、最初に論理を前もって知っておく必要があります。

関連する問題