вставьте данные в форму использования сводной таблицы и покажите ее index.blade.php в laravel 5.7 - PullRequest
0 голосов
/ 19 октября 2018

У меня есть форма create team.blade.php ниже этого

form.blade.php

Форма команды index.blade.php

index.blade.php

dd

отобразить имя пользователя из одной команды с этим пользователем и отобразить проект, который выполняетсяпользователь, и отобразить пользователя как что (роль).

отношения одного пользователя имеет много команд.и одна команда имеет много пользователей.поэтому я выбираю много-много отношений.но когда я создаю команду, я хочу вставить user_id и team_id в сводную таблицу user_teams как таблицу отношений между пользователем и командой.

но когда я попытался создать команду, не удалось, он не сохранил данные в user_teamsТаблица.и в индексе команды он не отображает имя пользователя команды с этим пользователем, а отображает проект, который выполняется пользователем, и отображает пользователя как что.

мой пользовательмодели

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Presence;
use App\Models\Project;
use App\Productivity;
use App\Sick_leave;
use App\Annual_leave;
use App\Models\Team;

class User extends Authenticatable
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password', 'role_id',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

public function role()
    {
        return $this->belongsTo(Role::class, 'role_id');
    }

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

public function projects()
    {
        return $this->belongsToMany(Project::Class, 'user_projects');
    }
    }

Командные модели

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\User;
use App\Role;
use Auth;

class Team extends Model
{
use SoftDeletes;

protected $table = 'teams';
protected $fillable = [
    'id', 
    'project_id',  
];

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

public function project()
{
    return $this->belongsTo(Project::class);
}

public function role()
{
    return $this->belongsTo(Role::class);
}

}

Модель проекта

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Project extends Model
{
use SoftDeletes;
protected $table = 'projects';
protected $fillable = [
    'project_id',
    'project_name',
    'start_date',
    'end_date',
    'project_category',
];

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

public function team()
{
    return $this->hasOne(Team::class);
}
}

Модель UserTeam

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class UserTeam extends Model
{
use SoftDeletes;    
protected $table = "user_teams";

public function team()
{
    return $this->belongsTo(Team::class);
}

public function user()
{
    return $this->belongsTo(User::class);
}
}

Team Controller

public function index()
{
    $users = auth()->user()->name;
    $users = User::all();
    return view ('teams.index', compact ('teams', 'users', 'projects'));
}
public function create()
{
    $users = User::all();
    $projects = Project::pluck('project_name', 'id');
    return view ('teams.form', compact('projects', 'users'));
}
public function store(Request $request)
{
    $team = Team::create($request->all());
    $userIds = User::find(2);
    $team->users()->attach($userIds);
    return redirect()->route('team.create');
}

В user_teams есть поля user_id и team_id.как мне это преодолеть ??

1 Ответ

0 голосов
/ 19 октября 2018

Вы должны создать команду и затем присоединить пользователей, которые к ней принадлежат.

Пример из документов :

Присоединение

Eloquent также предоставляет несколько дополнительных вспомогательных методов, чтобы сделать работу со связанными моделями более удобной.Например, давайте представим, что у пользователя может быть много ролей, а у роли может быть много пользователей.Чтобы прикрепить роль к пользователю, вставив запись в промежуточную таблицу, которая объединяет модели, используйте метод присоединения:

$user = App\User::find(1);

$user->roles()->attach($roleId);

В вашем случае:

Командный контроллер

public function store(Request $request)
{
    $team = Team::create($request->except('user_id'));
    $team->users()->attach($request->get('user_id', []));
    return redirect()->route('team.create');
}
...