簡體   English   中英

如何在Laravel中為hasOne()關系指定數據透視表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM