에서 삭제 부드러운이 내 모델 사용 항상 null
, 내 특성이 제거되면 작동합니다. 왜 ???laravel 5 문제
0
A
답변
1
당신이 말한 바로는 의도 한대로 작동하고 있습니다. Laravel에서 소프트 삭제 특성을 사용하면 모델이 데이터베이스에서 삭제되지 않습니다. 모델을 destroy()에 전달하면 삭제 된 필드가 null이 아닌 경우에만 발생합니다. 당신이 softdelete 특성이 deleted_at 컬럼에 대한 SQL에
where null
을 추가
ImageModel::where('id', 12)->first();
전화
당신이 Laravel의 코드에 더 깊이 보면
. 즉, 말했듯이 형질을 끄면 $ imageFile은 null이되지 않습니다 (작동 중입니다). softdelete는 DB에서 모델을 절대 삭제하지 않았기 때문에 해당 모델의 DB에 null이 아닌 값을 추가 했으므로 일반적인 laravel 쿼리에서 볼 수 있습니다. 소프트 삭제를 사용하지 않을 때 Laravel은 deleted_at 필드에서 모델을 볼 수 있도록합니다. softdeletes를 켜면 null 값만 검색되고 모델은 소프트 삭제되었으므로 (null이 아닌 값이 있음) $ imageFile을 null로 반환합니다.bytewave 말했듯이, 제대로 $ imageFile에 null 값을 반환하지 않도록 softdeletes를 사용하여, 당신은 다음처럼 쿼리에 softdeleted 모델에 추가해야합니다 :
Image::withTrashed()->where('id', 12')->first();
을 당신이 찾고 있던 생각 약간 다른 기능 (롤백)을 위해, softdelete 특성의 의도와 조금 다릅니다. 매뉴얼은 꽤 좋다 : 5.4 soft-deletes. 그러나 특성 코드를 더 깊게 본다면 도움이 될 것이다.
-> restore() 기능도 살펴보십시오. 이렇게하면 찾고 있던 롤백에 더 가까이 다가 갈 수 있습니다. 그러나 삭제 된 것을 알기 위해서는 먼저 논리를 미리 알아야합니다.
이미지 # 12이 삭제 되었습니까? 그렇다면'Image :: withTrashed() -> ('id', 12 ') -> first();를 사용해야합니다. – Bytewave
그렇지 않습니다. 내가 말했듯이이 부분을 제거하면 'SoftDeletes 사용하기'가 작동하고 있습니다. ImageModel :: where ('id', 12) -> first();'에서 데이터를 가져옵니다. 내가 간다면, 그것은 null입니다. – Chester
소프트 삭제로 삭제되면 'deleted_at' 필드가 null이 아닙니다. – Dmitry