【问题标题】:connecting two tables though a pivot table laravel6通过数据透视表连接两个表 laravel 6
【发布时间】:2020-03-08 20:40:01
【问题描述】:

很抱歉抽象标题,但我无法解释我想要的标题。我想要登录的用户 1)创建一个团队 2)查看他的团队,我已经完成了布局和创建团队功能.但我不明白如何显示当前登录用户的团队。

我的创建团队控制器

  public function store(Request $request)
  {
    $team=Team::create($request->all());

    return redirect()->route('view');
  }

我的 ViewTeamController(我认为这是错误的部分,它显示了所有团队,但我只想要登录用户的所有团队)

      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'));


      }

我的 team.php 模型

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');
  }
}

我的 User.php 模型

    public function teams(){
      return $this->belongsToMany(Team::class,'team_user','users_id','teams_id');
    }

我的 createteams.blade.php 视图

@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

我的 viewteams.blade.php 视图

@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

【问题讨论】:

    标签: php mysql laravel pivot


    【解决方案1】:

    在我看来,您在 Teams 模型中与用户的反向关系需要更改为 belongsTo。所以一个用户可以有多个团队,但一个团队只能有一个用户。

    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');
        }
    }
    

    不清楚你的商店路由是如何设置的,如果你注入用户,但如果请求不包含登录用户,你可以像这样更新它:

    public function store(Request $request)
    {
        $user = auth()->user();
        $user->teams()->create($request->all());
        return redirect()->route('view');
    }
    

    获取用户团队的控制器示例

    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
    

    【讨论】:

    • 在您的代码中添加一些解释将使其对提出问题的人以及未来的访问者更有帮助。特别是原始代码有什么问题?你改变了什么?
    • 我想补充一点,一个团队最多可以有 4 个用户。这就是我制作数据透视表的原因。
    • 它给了我一个错误行 Call to a member function with() on null on line {$user=auth()->user()->with('teams');}跨度>
    • 我无法测试代码。将该行替换为您之前的内容并尝试 $user = User::with('teams')->find(Auth::id());
    【解决方案2】:

    找到解决方案 我的 CreateTeamController

      public function store(Request $request)
      {
        $user=auth()->user();
        $team=Team::create($request->all());
        $user->teams()->attach($team);
    
    
    
    
        return redirect()->route('view');
      }
    

    我的视图团队控制器

          public function index()
          {
    
            $user=User::find(Auth::id());
            $user = User::with('teams')->find(Auth::id());
            return view('teams.viewteams',compact('user'));
    
    
    
          }
    

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 1970-01-01
      • 2018-06-30
      • 2019-01-27
      • 2017-06-21
      • 2016-06-14
      • 1970-01-01
      • 2020-06-24
      • 2018-09-26
      相关资源
      最近更新 更多