除去所選擇的模型我有一個Lesson
模型以下字段:有這些領域自動刪除相關車型在laravel
lesson_id
title
start_date
end_date
並有Content
模型:
content_id
lesson_id
contentable_id
contentable_type
order
一個一對多關係介於Lesson
和Content
之間。
另外,我有一個名爲Unit
這些所在領域的兩個另一型號:
unit_id
title
time
而且Test
這些:
test_id
title
description
內容contentable_type
和contentable_id
屬性持有相關單位(或測試)數據到特定的課程。
例如,在內容的contentable_type
字段可以插入只應用\單位或應用\測試串和contentable_id
認爲單位或測試的ID。
(要小心,內容模型不是爲了創造這些表之間的變形關係,我創造了它東陽我想給訂貨能力的單位和測試課)
現在,假設我想刪除特定內容和相關單元(或測試)。
刪除內容模型實例很容易,但要刪除相關單元(或測試),我必須從contentable_type
中獲取適當的型號名稱,然後選擇並刪除它。
對於我寫了這個:
public function destroy ($course_id, $lesson_id, $content_id)
{
$content = Content::findOrFail($content_id);
$modelName = $content->contentable_type;
$modelName::find($content->contentable_id)->delete();
$content->delete();
}
儘管工作正常,但我認爲這不是方便。 我搜索一種方式,當刪除內容模型時,這會自動找到相關模型並將其刪除。
什麼是最好的和正確的解決方案?
您可以在遷移時添加外鍵約束並添加onDelete級聯,因此刪除將自動保留在數據庫級別。在這裏閱讀更多 - https://laravel.com/docs/5.2/migrations#foreign-key-constraints – naneri
Sice相關模型名稱保留'contentable_type'字段作爲字符串我無法使用外鍵優點。如果可以在這種情況下指導我。 –
對不起,我的壞,沒有注意到 – naneri