あなたの言ったことから、それは意図したとおりに動作しています。 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()関数も見てください。これは、探しているロールバックに近づくのに役立ちます。しかし、削除されたものがどれかを知るには、最初に論理を前もって知っておく必要があります。
画像#12は削除されていますか?もしそうなら、 'Image :: withTrashed() - > where( 'id'、12 ') - > first();'を使うべきです。 – Bytewave
それはありません。私が言ったように私がこの部分を削除すると、私のモードから 'use SoftDeletes;'が動作しています。ImageModel :: where( 'id'、12) - > first(); 'からデータを取得しています。私が守っていれば、それはヌルです。 – Chester
ソフト削除で削除された場合、 'deleted_at'フィールドはnullではありません。 – Dmitry