2017-09-28 3 views
0

リレーションを持つすべてのユーザーを表示したい。foreachループでリレーションを持つユーザーを表示する

FilterController.php

public function getFilter($sport) 
    { 
     $user = Auth::user(); 
     $users = $this->model->getUsersByDiscipline($sport); 

     return view('filter.' . $sport, compact('user', 'users')); 
    } 

User.php

public function getUsersByDiscipline($sport) 
    { 
     $users = User::with('user_data', 'languages')->where('discipline', $sport)->get(); 

     return $users; 
    } 

そして、私はそれが好きで表示しよう:現在、私は持っている

{{$user->user_data->employment}} 

しかし、エラーがあります:

は、
Property [employment] does not exist on this collection instance 

正しく行うにはどうすればよいですか?

+0

ここにブレードビューを貼り付けることはできますか? foreachを正しく使用していないようです –

+0

あなたのループはどこですか? –

+0

は '雇用'関係または属性ですか? (ビュー:/ var/www/html/SCE/resources /)を参照してください: – Wreigh

答えて

0
$users = User::with('user_data', 'languages')->where('discipline', $sport)->get(); 

はこれを行うことにより、あなたは$ユーザーの配列を取得します

ますので、ループに

@foreach($users as $user) 
    {{ $user->user_data()->employment }} 
@endforeach 

を実行する必要がありますまたはあなたがコントロール内のコードをデバッグすることができ

$users = User::with('user_data', 'languages')->where('discipline', $sport)->get(); 

    foreach($users as $user){ 
     dd($user->user_data()); //check what it returns in user_data; 
    } 
+0

私は得た: 未定義のプロパティ:\データベース\ Eloquent \関係\ HasMany :: $ short_description \私がショートモデルを取得したいので – browinski

+0

これは間違っています、 'user_data()'は 'user_data'のみでなければなりません。相対モデル**、' user_data( ) 'は関係を返します。 – Wreigh

+0

ohhh申し訳ありません。このステートメントが返すものをdd($ user-> user_data)で確認できます。 –

0

employmentが関係の場合、まだロードされていないと思います。したがって、ネストしたeager loadingを使用してロードすることができます。あなたの雄弁なクエリで

、あなたがこれを使用することができます:$user->user_data->employment

参考:https://laravel.com/docs/5.5/eloquent-relationships#nested-eager-loading

$users = User::with('user_data.employment', 'languages')->where('discipline', $sport)->get(); 

お知らせがemploymentを意味するドット構文はuser_dataの関係で、それが今使ってロードしてアクセスされます

関連する問題