Новичок Laravel / Eloquent здесь. Я реализую простую настольную игру. В каждой игре 4 игрока. Структура столов состоит из таблицы игроков и таблицы игр:
SELECT * FROM players;
id | name |
---------------------
1 | John |
2 | Mary |
3 | Linda |
4 | Alex |
5 | Chris |
6 | Ron |
7 | Dave |
SELECT * FROM games;
id | player1_id | player2_id | player3_id player4_id
---------------------------------------------------------------------
1 | 1 | 2 | 3 | 4
2 | 3 | 5 | 6 | 7
3 | 2 | 3 | 5 | 6
4 | 2 | 4 | 5 | 7
Цель: я хочу получить доступ ко всем играм, в которых участвовал игрок.
Для этого я пытаюсь написать функцию games()
в модели Player. Для игрока с id 2 должны быть возвращены игры 1, 3, 4 / для игрока с id 3 должны быть возвращены игры 1, 2, 3 и так далее.
С необработанным SQL я бы сделал что-то вроде этого:
SELECT * FROM games WHERE
(player1_id = 2 OR player2_id = 2 OR player3_id = 2 OR player4_id = 2)
Но с Eloquent мне трудно понять, как нужно установить эти отношения, чтобы добиться этого.
Точно так же я хотел бы иметь возможность делать противоположное - возвращать всех игроков игры - с помощью функции players()
в модели Game
.
Модели:
// Models/Player.php
//...
class Player extends Model
{
public function games(){
//?
}
}
// Models/Game.php
//...
class Game extends Model
{
public function players(){
//?
}
}
DB::something
, подумайте, чтоDB::something
не существует для простых операций !!!!!!!!! - person matiaslauriti   schedule 10.04.2021