2017-12-31 40 views
2

Laravel 5.5を実行しているプロジェクトがあり、データベースに次のテーブルがあります。Eraquentを使ったLaravelの関係は本当に正しいですか?

USERS (
    ID, 
    NAME, 
    PERMISSION_ID 
) 

PERMISSIONS (
    ID, 
    NAME 
) 

私は間違っていないよ場合は、権限を持つUSERS関係は、(ユーザーが少なくとも1つの許可と1の最大値を有する)1.1であるので、OneToOne関係です。

私のユーザモデルで私は以下の関係を作った。

class User extends Authenticatable 
{ 
    public function permission() { 
        return $this->hasOne('App\Models\Permission'); 
    } 
} 

しかし、このようにして、Laravel/EloquentはPERMISSIONSテーブルの関係を探します。私はすでにLaravelのマニュアルを参考にして、私はhasOneの方法でのForeignKeyとLocalKeyを指定することができることを見てきた

SELECT * FROM PERMISSIONS WHERE PERMISSIONS.USER_ID = 1 

:に似た選択を生成します。これは関係を解決します。

しかし、デフォルトでは、PERMISSIONSテーブルの情報をフェッチするのは本当にLaravel/Eloquentにとって正しいですか?正しいものは、PERMISSION_IDのUSERS表を見ることではありませんか?ため、私はhasOneのとbelongsToの違いを研究しアレクセイMezenin

の応答に

@Edit

。外部キーが正しいものでhasOneのを使用することです他のテーブルの上にあるとき、私は理解し何から

What is the difference between BelongsTo And HasOne in Laravel

:そして、私は次のような答えを見つけました。

外部キーがテンプレートのテーブルにある場合、正しいものはbelongsToを使用することです。

私は感謝アレクセイMezeninは、時間の横にこれらの詳細にでチューニングし

答えて

1

あなたの関係はあなたがhasOne()代わりのbelongsToを使用している、反転されjedrzej.kurylo滞在されます。

public function permission() 
{ 
    return $this->belongsTo(Permission::class); 
} 

そして、あなたは(あなたがそれを使用したい場合は場合)hasOne()関係を追加したい場合がありますPermissionモデルで:

public function user() 
{ 
    return $this->hasOne(User::class); 
} 

しかし通常は、Userモデルでは、この関係を使用します多くのユーザーが同じ権限を使用できます。この場合、hasOnehasManyに変更してください。

関連する問題