[英]How to specify pivot table for hasOne() relationship in Laravel
我有幾個模型,其中包括用於避免多態關系的數據透視表。
role table
id
name
description
restriction table
id
rule
status
restriction_role table
id
restriction_id
role_id
進行此設置的原因是,角色和限制實際上都可以屬於多個其他模型。 在這種情況下,一個角色只能具有1個限制。 我通常將其定義為
class Role extends Eloquent {
public function restrictions()
{
return $this->hasOne('Restriction');
}
}
這顯然是行不通的,因為Laravel不知道連接此關系的數據透視表。 我可以通過使用多對多關系輕松完成此操作,但這並不是我的模型的確切工作方式。 在文檔中沒有看到任何用於定義此內容的信息。 有什么想法嗎?
我已經解決了這個問題,方法是使用belongsToMany
關系並belongsToMany
定義一個自定義訪問器,如下所示:
public function foo()
{
return $this->belongsToMany(App\Bar::class);
}
public function getFooAttribute()
{
return $this->foo()->first();
}
就像@deczo在評論中指出的那樣,belongsToMany()是所有在這里工作的東西。 如果只需要一個結果但不能使用hasOne()
關系,則建議使用first()
方法返回第一個結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.