2016-12-14 6 views
1

Djangoには、「自動1対1」というコンセプトがあります。ここで、親を作成すると、通常はデフォルトまたはNULL値で子関係が自動的に追加されます。これは、あなたがそれと対話する前に関係が存在するかどうか疑問に思うことがないので、非常に便利です。Laravelの自動1対1モデル

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) - ちょっと古いかもしれませんが、ちょうど最初のリンクのdocs。 –

+0

[Eloquentリレーションを持つNullオブジェクトパターン]の複製があります(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()に属性の配列を渡すこともできます(例:withDefault(['name' => 'my child']))。

関連する問題