2016-12-14 17 views
1

在Django中有一個「Auto one-to-one」的概念,當您創建父級時,子級關係也會自動添加,通常使用默認值或空值。這可能非常有用,因爲在開始與之交互之前,您不必懷疑關係是否存在。Laravel中的自動一對一模型

Laravel是否有辦法做到這一點?

+0

看起來像沒有,必須[明確](https://laravel.com/docs/5.3/eloquent-relationships#one-to-one)定義,儘管您可以一次性保存[幾個相關的模型實例] (http://laravel.io/forum/06-11-2014-how-to-save-eloquent-model-with-relations-in-one-go?page=1) - 可能有點過時,只要閱讀文檔在第一個鏈接。 –

+0

[空對象模式與雄辯關係]的可能重複(http://stackoverflow.com/questions/33085339/null-object-pattern-with-eloquent-relations) – patricus

回答

1

從Laravel 5.3.23起,HasOne關係增加了withDefault()方法。所以,在你Parent類的關係定義,你會:

public function child() 
{ 
    return $this->hasOne(Child::class)->withDefault(); 
} 

現在,當你訪問父child關係,如果沒有孩子的記錄,你會得到Child的新實例模型而不是null

如果您希望新實例具有填充的默認值(例如withDefault(['name' => 'my child'])),您還可以在withDefault()中傳遞一組屬性。