2014-11-24 51 views
0

我正在實施一個應用程序,其中應由管理員首先批准某些內容。所以我在需要批准的模型中添加了一列。Laravel。不能使用其他特性軟刪除模型

所有應用程序中的普通用戶都只能看到管理員批准的模型,所以我向該模型添加了一個全局範圍,以僅過濾管理員批准的記錄。我的問題是,這與軟刪除無法正常工作。

當管理員決定不批准某些內容時,他應該能夠將其刪除。所以,我做這樣的事情:

$model = Model::withUnapproved()->find($model_id); 
if(!$model){ 
    //handle error 
} 
$model->delete(); 

這段代碼實際上找到的模式,但在執行刪除時,查詢是:

DELETE FROM table WHERE deleted_at IS NULL and approved_by IS NOT NULL and model_id=`id`; 

爲什麼它被添加and approved_by IS NOT NULL?這會導致找到任何記錄,因此不會刪除任何記錄。

如果將其更改爲$model->withUnapproved()->delete(),它會刪除所有記錄。

任何燈在這?在此先感謝

+0

我有同樣的問題。你知道了嗎?我無法刪除我的模型,因爲它應用了全局範圍,然後該模型不存在。 :\ – 2015-06-20 21:46:35

+1

我爲它創建了一個問題 - https://github.com/laravel/framework/issues/9349 - 我目前只是手動指定'deleted_at'並使用softDeletes,直到出現修復或清理工作。 – 2015-06-20 22:02:51

+0

我沒有,我沒有改寫這個特性來提供與軟刪除特性相同的功能。我沒有考慮在github中開放一個問題。立即給+1。 – 2015-06-20 22:20:31

回答

0

爲什麼它添加和approved_by IS NOT NULL?這會導致找到任何記錄,因此不會刪除任何記錄。

您的全球範圍就是這樣 - 全球。它適用於該模型的所有Eloquent查詢,包括刪除。

+0

我知道,但我沒有範圍檢索我的模式...所以,當我試圖刪除它,我希望範圍保持。但是當我在模型上調用delete時,它會再次添加範圍。 – 2014-11-25 01:00:47

+0

@JavierEnríquezEloquent'performDeleteOnModel'函數執行'$ this-> newQuery()',因此需要。 – ceejayoz 2014-11-25 01:03:49