У меня проблема со многими и многими отношениями в моем проекте larvel 5.6. У меня есть несколько разных отношений "многие ко многим", которые уже работают, но я не могу найти, что не так в этом. Я уже пробовал Google и stackoverflow, но не смог найти ответ.
Итак, у меня 3 таблицы; игроков, команд и players_in_teams. Я хотел бы показать игрока и все команды, в которых он входит.
Это мой (простой) макет таблицы:
Команды - id - teamName
Игроки - id - firstName - lastName
PlayersInTeams - id - FKplayerID - FKteamID
мой код:
Player.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Player extends Model
{
protected $fillable = [
'firstName', 'lastName'
];
public function teams() {
return $this->belongsToMany('App\PlayersInTeam', 'players_in_teams', 'FKteamID', 'FKplayerID');
}
}
Team.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Team extends Model
{
protected $fillable = ['FKuserID', 'teamName', 'teamDescription', 'FKmediaID'];
public function players(){
return $this->belongsToMany('App\PlayersInTeam', 'players_in_teams', 'FKteamID', 'FKplayerID');
}
}
PlayersInTeam.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PlayersInTeam extends Model
{
protected $fillable = ['FKteamID', 'FKplayerID'];
}
PlayerController.php
public function index()
{
$players = Player::all();
return view('players.index', compact('players', $players));
}
showplayer.blade.php
<li>{{ $player->firstName.' '.$player->lastName }}</li>
<li>{{ $player->id }}</li>
@if($player->teams)
<li>{{ $player->teams->id }}</li>
@endif
Полная ошибка, которую я получаю:
SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1066 Не уникальная таблица/псевдоним: "игроки_ин_тема" (SQL: выберите players_in_teams
. *, players_in_teams
. FKteamID
как pivot_FKteamID
, players_in_teams
. FKplayerID
как pivot_FKplayerID
от players_in_teams
внутреннее соединение players_in_teams
на players_in_teams
id
= players_in_teams
. FKplayerID
где players_in_teams
. FKteamID
= 1) (Просмотр:../resources/views/players/showplayer.blade.php)
Если надежда, что кто-то увидит то, что мне не хватает,
Заранее спасибо!
Параметры функций устанавливаются на сводные таблицы. Вы должны установить их в окончательную модель. Попробуй это:
public function teams() {
return $this->belongsToMany('App\Team', 'players_in_teams', 'FKplayerID', 'FKteamID');
}
public function players(){
return $this->belongsToMany('App\Player', 'players_in_teams', 'FKteamID', 'FKplayerID');
}
Я бы удостоверился, что в ваших миграциях ваши внешние ключи на вашей таблице соединения установлены правильно. Что-то вроде этого:
$table->foreign('FKplayerID')->references('id')->on('players')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('FKteamID')->references('id')->on('teams')->onDelete('cascade')->onUpdate('cascade');