2016-05-10 8 views
0

StudentSeminarモデルの多対多関係を定義しました。 1人の特定の学生特定のセミナーに参加しているかどうかを調べるにはどうすればよいですか?私が達成したいものの非作業例を以下に例示する:レコードが別のレコードに添付されているかどうかを確認する方法は?

$seminar->students()->contains($student->id); 

上記のコードスニペットを使用するときは、次のエラーが表示されます。メッセージと

BadMethodCallException「未定義のメソッドを照らし\ Databaseへのコール\クエリー\ビルダー::含まれて()」

答えて

1

代わりに試してみてください。

$seminar->students->contains($student->id); 
仮定

は、あなたがそれをさらに簡素化し、ちょうど使用することができますStudentモデルのインスタンスが含まれています

$seminar->students->contains($student); 

あなたはLaravelクエリビルダを使用している括弧を追加し、クエリを完了したことはありません

。あなたがもともと持っていた方法でそれを行うには、必要があります:あなたはあなたの学生を取得する際に制約を追加したい場合

$seminar->students()->get()->contains($student->id); 

この方法が有用である可能性があります。

しかし、通常、カッコを省略すると、コレクションが返され、containsのようなメソッドを使用できます。

これには、関係がロードされた後でデータベースを再クエリしないという追加の利点があります。したがって、一般的には、関係をフェッチする手段としてはるかに効率的です。

すでに学生をロードして、あなたをチェックするデータベースの効率的な方法を望んでいない場合は、代わりに使用することができます答えを

$seminar->students()->exists($student->id); 
+0

感謝を。それはDBに不必要な負荷を導入しないでしょうか?与えられた '$ seminar'の全ての学生をデータベースから取り出し、それ以降は' contains() 'で配列をチェックしますので、 –

+1

はい。この場合、コレクションメソッドとして 'contains'を使うことはできません。 '$ seminar-> students() - > exists($ student - > id);' –

+0

ありがとう、 'exists()'メソッドはまさに私が探していたものでした –

関連する問題