2017-04-24 209 views
0

刪除()我使用L5.3.31並有以下型號:Laravel 5:擴展型號

附加組件

圖片

關係:

// Addon.php 
public function images() 
{ 
    return $this->hasMany('App\Image'); 
} 

// Image.php 
public function addon() 
{ 
    return $this->belongsTo('App\Addon'); 
} 

我現在想要擴展delete()方法以刪除在刪除圖像對象時保存在文件系統上的一些圖像。據我瞭解,爲了做到這一點,我需要在Image模型上擴展delete()方法。現在,在我的圖像模型,如果我嘗試這樣做:

public function delete() 
{ 
    dd('triggered'); 
    parent::delete(); 
} 

我希望它死並轉儲triggered。但沒有任何反應,對象就像以前一樣被刪除。這告訴我上面的代碼塊在刪除時不會被執行,對吧?

我也在Addon模型上嘗試過相同的結果。最後,我想完成的是這個,當我做

$addon->images()->delete();我想laravel刪除代表每個圖像對象的文件。另外,如果我做$addon->images()->where('id', '=', $id)->delete();我想刪除給定的ID與對象的圖像文件。

順便說一句,我不知道這是否重要,但我已經設置關係級聯刪除,所以如果我做$addon->where('id', '=', $id)->delete();它也刪除其相關的圖像對象。

+0

你最好使用[listener/observer](https://laravel.com/docs/5.4/eloquent#observers)。 – Samsquanch

回答

3

$addon->images()->where('id', '=', $id)->delete();

$addon->images()->find(11)->delete();

第一個是查詢生成器級別之間的差異(這不會觸發模型上的刪除/刪除事件)

第二個是在模型級別(這確實觸發刪除/刪除甚至ts型號爲 )。 支票上的事件本文檔中laravel 5.4

https://laravel.com/docs/5.4/eloquent#events

您可以添加觀察者捕捉到刪除事件並做你想做 ,什麼那裏有一個問題,打開和關閉上laravel同樣的事情 https://github.com/laravel/framework/issues/2536

+0

謝謝,我現在明白了。 –