Reputation: 53
Sorry for the abstract title but i cannot explain what i want in the title.I want the user that is logged in to 1) Create a team 2)View his teams , I have done the layout and the create a team functionality.But i cannot understand how to display the teams of the user that is currently logged in.
My CreateTeamController
public function store(Request $request)
{
$team=Team::create($request->all());
return redirect()->route('view');
}
My ViewTeamController (this is the part which is wrong i think, it displays all the teams but i only want all the teams of the user that is logged in )
public function index()
{
$user=User::find(Auth::id());
$teams=Team::all();
$user->teams()->sync($teams);
$user = User::with('teams')->find(Auth::id());
return view('teams.viewteams',compact('user'));
}
my team.php model
class Team extends Model
{
protected $fillable = [
'team_name', 'desc',
];
protected $table='teams';
public function users(){
return $this->belongsToMany(User::class,'team_user','users_id','teams_id');
}
}
my User.php model
public function teams(){
return $this->belongsToMany(Team::class,'team_user','users_id','teams_id');
}
my createteams.blade.php view
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header"><h2 style="text-align:center;">Create Your Own Team</h2></div>
<div class="card-body">
<form method="POST" action="createteams">
@csrf
<div class="form-group row">
<label for="team_name" class="col-md-4 col-form-label text-md-right">Team Name</label>
<div class="col-md-6">
<input id="team_name" type="text" class="form-control @error('team_name') is-invalid @enderror" name="team_name" value="{{ old('team_name') }}" required autocomplete="team_name" autofocus>
@error('team_name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="desc" class="col-md-4 col-form-label text-md-right">{{ __('Team Description') }}</label>
<div class="col-md-6">
<input id="desc" type="text" name="desc" class="form-control @error('desc') is-invalid @enderror"value="{{ old('desc') }}">
@error('desc')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="org_select" class="col-md-4 col-form-label text-md-right">{{ __('Select up to 4 Orgs') }}<br>Hold Ctrl For multiple selection</label>
<div class="col-md-6">
<select id="org_select" multiple class="form-control" name="org_select" value="{{ old('org_select') }}" autocomplete="org_select">
<option value= "frederick">Frederick</option>
<option value="I dont know">Cyprus Uni</option>
</select>
@error('org_select')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
Confirm
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
My viewteams.blade.php view
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header"><h2 style="text-align:center;">Your Teams</h2></div>
<div class="card-body">
@foreach ($user->teams as $team)
{{$team->team_name}}
@endforeach
</div>
</div>
</div>
</div>
</div>
@endsection
Upvotes: 0
Views: 52
Reputation: 53
found the solution my CreateTeamController
public function store(Request $request)
{
$user=auth()->user();
$team=Team::create($request->all());
$user->teams()->attach($team);
return redirect()->route('view');
}
myviewteamcontroller
public function index()
{
$user=User::find(Auth::id());
$user = User::with('teams')->find(Auth::id());
return view('teams.viewteams',compact('user'));
}
Upvotes: 0
Reputation: 1272
It looks to me like your inverse relationship for the user in the Teams model needs to be changed to a belongsTo. So a user can have many teams, but a team can only have one user.
class User extends Model
{
public function teams()
{
return $this->hasMany('App\Team');
}
}
class Team extends Model
{
/**
* Get the user that owns the team.
*/
public function user()
{
return $this->belongsTo('App\User');
}
}
It's not clear how your store route is setup and if you inject the user, but if the request does not contain the logged in user, you could update it like so:
public function store(Request $request)
{
$user = auth()->user();
$user->teams()->create($request->all());
return redirect()->route('view');
}
A controller example to get a users teams
class TeamController extends Controller
{
public function index()
{
// Get logged in user
$user = auth()->user()->with('teams');
return view('teams.index', ['user' => $user]);
}
}
// in view
@foreach ($user->teams as $team)
<p>Team name: {{ $team->name }}</p>
@endforeach
Upvotes: 1