【问题标题】:How to link two tables with a pivot table?如何将两个表与数据透视表链接?
【发布时间】:2020-06-20 14:47:22
【问题描述】:

嘿,对我想做的项目进行一些概述。我想显示用户的团队。

当用户登录并打开viewteams 页面时。他必须展示他加入/创建的团队。为此,我已经完成了以下过程......

我的 ViewTeamController

{
    public function index()
    {
      $user=User::first();
      $teams=Team::all();
      $user->teams()->attach($teams);
      return view('teams.viewteams',compact('teams'));
    }

    public function store()
    {

    }

}

我的用户模型

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

我的团队模型

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

我的数据透视表迁移

    public function up()
    {
        Schema::create('team_user', function (Blueprint $table) {
            $table->unsignedBigInteger('users_id');
            $table->unsignedBigInteger('teams_id');



            $table->index('users_id');
            $table->index('teams_id');
            $table->timestamps();
        });
    }

web.php 路由

Route::get('/viewteams','ViewTeamController@index');
Route::post('/viewteams','ViewTeamController@store');

我的观点teams.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 ($teams as $team)
                    @foreach($team->users as $user)
                      {{$user->org_name}}
                      @endforeach
                  @endforeach


                </div>
            </div>
        </div>
    </div>
</div>
@endsection

我用于创建团队的另一个控制器

<?php

namespace App\Http\Controllers;
use App\Team;
use Illuminate\Http\Request;

class CreateTeamController extends Controller
{
  public function index(Request $request)
  {
    return view('teams.createteams');

  }

  public function store(Request $request)
  {
    $team=Team::create($request->all());
    return redirect()->route('home');
  }


}

我所有的路线

Route::get('/login', function () {
    return view('auth/login');
});

Auth::routes();

Route::get('/viewteams','ViewTeamController@index');
Route::post('/viewteams','ViewTeamController@store');

Route::get('/createteams','CreateTeamController@index');

Route::post('/createteams','CreateTeamController@store') ;

Route::get('/home', 'HomeController@index')->name('home');

【问题讨论】:

  • 你能显示你分配用户和团队的位置吗
  • 先生什么意思?
  • 如何将用户附加到团队。你能显示这些代码吗?
  • 我编辑了我的控制器,但我在那里所做的没有用,因为我只得到了用户的名字,而且很多次
  • 因为每当您打开查看团队页面时,您都会将第一个用户附加到每个团队?

标签: php mysql laravel hyperlink pivot


【解决方案1】:

要实现当前用户团队,首先您应该使用 Auth 门面获得经过身份验证的用户 ID。

之后,您可以使用“with”方法为用户加载加入的团队。它加载团队关系。

ViewTeamController

public function index()
{
     $user = User::with('teams')->find(Auth::id());

     return view('teams.viewteams',compact('user'))
}

viewteams.blade.php

@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->name }}
                  @endforeach
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

【讨论】:

  • 不是故意的他是其中的一员。
  • 它给了我另一个错误 Class 'App\Http\Controllers\Auth' not found 。
  • 您可以从Illuminate\Support\Facade\Auth 导入Auth 外观,也可以像\Auth 一样将反斜杠添加到auth 外观
  • 似乎我缺少支持/身份验证类,我需要使用 composer 安装它,但是当我安装时出现错误
  • 你不需要安装,laravel 自带了这些外观。我刚刚在命名空间中打错了字。添加 ViewTeamController 的下一行开头。 use Illuminate\Support\Facades\Auth;
【解决方案2】:

您需要重新访问和更新将数据存储到用户表和团队用户的代码。以填充数据透视表的方式存储数据的最简单方法是使用sync() 方法,如https://laravel.com/docs/master/eloquent-relationships#updating-many-to-many-relationships 中所述

我对名字和关系做了一些假设,买你可能有这样的东西:

$user = User::find(2);
$user->teams()->sync([4,5]);

在这种情况下,您可以将user_id of 2 and team_id of 4 的记录和user_id of 2 and a team_id of 5 的第二条记录放入数据透视表中。

如果您想分享更多代码来展示您当前处理事物的方式定义和控制器,我们可以帮助解决任何更具体的实现问题。

【讨论】:

  • 我用你问的东西编辑了我的帖子,或者至少我希望那是你问的!我是一个完全的新手,所以我无休止地浏览以了解如何做我想做的事情并让它发挥作用,但我不明白大部分事情。就像这个同步命令,你解释得很好,但我希望现在登录的用户看到他参与的团队。
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2015-09-26
相关资源
最近更新 更多