Как связать две таблицы с сводной таблицей? - PullRequest
0 голосов
/ 08 марта 2020

Привет, небольшой обзор проекта, который я хочу сделать. Я хочу показать команды пользователя.

Когда пользователь вошел в систему и открыл страницу 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();
        });
    }

веб. php маршруты

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

my 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 ($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');

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Чтобы получить текущие команды пользователей, сначала вы должны получить аутентифицированный идентификатор пользователя, используя Auth фасад.

После этого вы можете загрузить объединенные команды для пользователя, используя метод «с». Он загружает отношения между командами.

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
0 голосов
/ 08 марта 2020

Вам нужно будет вернуться и обновить код, который сохраняет данные в таблице пользователей и пользователя групп. Самый простой способ сохранить данные таким образом, чтобы они заполняли сводную таблицу, - это использовать метод sync(), как описано в https://laravel.com/docs/master/eloquent-relationships#updating -мани-ко-многим-отношениям

I Я делаю некоторые предположения об именах и отношениях, но у вас может быть что-то вроде этого:

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

В этом случае вы бы поместили в сводную таблицу запись для user_id of 2 and team_id of 4 и вторую запись для a user_id of 2 and a team_id of 5.

Если вы хотите поделиться дополнительным кодом, показывающим определения маршрутов и контроллеры о том, как вы в настоящее время обрабатываете вещи, мы можем помочь с любыми более конкретными c вопросами реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...