Laravel 5.6 - красноречивая ошибка многие ко многим 1066 - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с отношениями многие ко многим в моем проекте laravel 5.6.У меня уже есть разные отношения многие ко многим, но я не могу найти, что не так в этом.Я уже пробовал google и stackoverflow, но не смог найти ответ.

Итак, у меня есть 3 таблицы;игроки, команды и игроки_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 Не уникальная таблица /псевдоним: 'Players_in_teams' (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)

Если надеждакто-то видит, чего мне не хватает,

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

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

$table->foreign('FKplayerID')->references('id')->on('players')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('FKteamID')->references('id')->on('teams')->onDelete('cascade')->onUpdate('cascade');
0 голосов
/ 29 мая 2018

Параметры функций установлены в сводных таблицах.Вы должны установить их в окончательную модель.Попробуйте это:

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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...