我有會員,人員和地址模型。他們與一對一關係相關。成員有一人,每人都有一個地址,地址屬於人,人屬於會員等。現在Laravel模型觀察者與關係
,我的地址也可以通過belongsTo一個位置...在2個可空colums所得,person_id
& location_id
我在Address model
上創建了一個觀察者。當我刪除會員時,如果設置了location_id
,我想要保留該地址。
public function deleting(Address $address)
{
if($address->location_id != null) {
$address->person_id = null;
$address->save();
return false;
} else {
return true;
}
}
奇怪的是,當我使用... ->address()->delete();
......它會與人刪除地址,Observerfunction不會着火。我必須先分別刪除地址$address->delete();
,現在Observerfunction將會啓動。 我正在考慮的另一個問題,如果這是另一回事呢?刪除'person_id'
集的位置?
是否有更好的方法來處理刪除模型(可以)屬於2個不同的模型? (只有一對一關係)。
我在想也許我必須爲會員和地點製作2個觀察員,然後在地址模型上放一個觀察員?或者根本沒有
編輯使用觀察家:
所以情況可能會出現,一個人,一個位置可以有相同的地址。在這種情況下,'person_id'&'location_id'在地址模型上爲!= null。
到目前爲止,我擁有MemberController上的所有功能。在我的情況下, public function destroy($ id)只會軟刪除一個成員,並保持Person和Address不變。
我現在需要修復的是forceDeleting,我已經能夠想出一些東西,但我不確定什麼是好方法。氣味的東西:P 當我刪除成員這樣
$member->person()->delete();
$member->forceDelete();
這會工作。但我將不得不做3次刪除? (包括地址)。 同時刪除一個地址應取決於是否存在location_id,因爲當某個地址也屬於某個位置時,我希望保留該地址,而不是將person_id設置爲null。
我試圖通過使地址模型的觀察員,但與此Im我面臨的問題不知道其會員或地點被刪除,所以我不知道應該檢查哪個'_id'無論是否爲空。
我正面臨的另一個問題是,當我刪除Member-> relation() - >方法時,觀察者函數不會觸發。它似乎工作時,我分別刪除地址$ address-> delete(); 因爲這個我懷疑,如果觀察員甚至是一個好方法,也許我應該只是在成員/位置控制器。
/**
* Permanently remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function remove($id)
{
$member = $this->model->onlyTrashed()->find($id);
$address = $member->person->address;
if($address->location_id != null) {
$address->person_id == null;
$address->save();
} else {
$address->delete();
}
$member->person()->delete();
$member->forceDelete();
這將工作,甚至可能是一個保持它愚蠢簡單的情況?但我不確定在這裏做這個地址的東西是一個好方法,只是試圖學習。
會員| hasOne - belongsTo |人員| hasOne - belongsTo |地址| belongsTo - hasOne |位置
你讓我失去了一點點。你能總結一下你究竟在做什麼以及你做什麼/不想做什麼? –
我已編輯我的問題;)sry –