2017-05-02 20 views
1

私はユーザーと部署を持ち、ユーザーは多くの部門に所属することができます。私は、現在のユーザーがその一部となっている部署ののみを表示するユーザーに、ユーザーモデルの範囲を定義しようとしている:リレーションシップコレクションを使用してリレーションシップを照会する方法

public function scopeVisible($query) { 
    $user = Auth::user(); 

    return $user->departments()->users(); 
} 

私はマニュアルを見てきたし、方法を見つけるように見えることはできませんこれをする。

マッピングを試みましたが、オブジェクトがコレクションであっても、メソッドの呼び出しがコレクションではなくクエリビルダーで行われるという奇妙なエラーが発生しました。 Laravel docsとして

答えて

1

は、あなたがより具体的なクエリのカスタマイズされた制約を追加するwhereHasを使用することができます言う:

あなたも、より多くの電力を必要とする場合、あなたは上の「どこ」の条件を入れてwhereHasとorWhereHas の方法を使用することができますクエリがあります。これらのメソッド を使用すると、カスタマイズされた制約を関係制約に追加できます。

次に、この作業をする必要があります:

public function scopeVisible($query) { 
    $user_id = Auth::user()->id; 

    return $query->whereHas('departaments', function($query) use ($user_id) { 
     $query->where('user_id', '=', $user_id); 
    }); 
} 

あなたが戻ってきているあなたのコード上からだと「メソッド呼び出しではなく、コレクションのクエリービルダーでなければなりません」について取得しているエラーをDepartmentsのコレクションである$user->departments()->users()の結果ではなく、クエリビルダを返す必要があります。

+0

ありがとうございました。おそらく、この質問に訪れる人々があなたのコードで起こっていることをよりよく理解できるように、説明を追加してください。途中で –

+0

@SebastianOlsen;) – Troyer

関連する問題