[英]Laravel Eloquent relationship between one Model and Many Models as MorphOne?
介紹:
我有這些表與他們的模型:
規則:
可以在此處完成兩種可能的關系規划:
用戶有一個地址和地址屬於用戶[即一對一的關系],但缺點是這里的外鍵位於地址表即user_id字段,並通過與其他模型[公司和財產]重復相同的關系,我們將獲得地址表中的另外兩個外鍵是[ company_id和property_id ],那么我們最終會得到 3個模型的3個外鍵但每行記錄只會填充一個,只留下兩個外鍵字段留空
我覺得這是地址表的間接費用。
或者相反:
我的問題:
是否有任何其他關系可以將這4個模型綁定在一個類似於多態關系的關系中,但是沒有使用MorphMany但是使用MorphOne這很奇怪,我在Laravel的文檔中找不到它,盡管該方法本身存在於Eloquent Relations中。
這種MorphOne多態關系是否可能以及它是如何組成的?
現有代碼:
//Address model
public function user(){
return $this->hasOne(User::class);
}
public function company(){
return $this->hasOne(Company::class);
}
public function property(){
return $this->hasOne(Property::class);
}
//User model
public function address(){
return $this->belongsTo(Address::class);
}
//Company model
public function address(){
return $this->belongsTo(Address::class);
}
//Property model
public function address(){
return $this->belongsTo(Address::class);
}
以下是一方地址與另一方用戶 , 公司和財產之間的MorphOne關系:
class Address extends Model
public function addressable(){
return $this->morphTo();
}
}
class User extends Model
public function address(){
return $this->morphOne(Address::class,'addressable'); //note this is not MorphMany()
}
}
class Company extends Model
public function address(){
return $this->morphOne(Address::class,'addressable');
}
}
class Property extends Model
public function address(){
return $this->morphOne(Address::class,'addressable');
}
}
那么在UserController中就是這樣的:
$user = User::find(1);
$addressData = [
'street_name' => '5, Golf street',
'country_id' => 100, //etc..
];
//to add new address record related to user:
$user->address()->create($addressData);
dd($user->address);
//to update existing address record related to user:
$user->address->update($addressData);
//dd($user->address);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.