Laravel 5.6 - красноречивая ошибка многие ко многим 1066

0

У меня проблема со многими и многими отношениями в моем проекте 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)

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

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

Теги:
laravel-5.6
laravel-5

2 ответа

0

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

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');
}
0

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

$table->foreign('FKplayerID')->references('id')->on('players')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('FKteamID')->references('id')->on('teams')->onDelete('cascade')->onUpdate('cascade');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню