У меня есть приложение Symfony 4.2.Есть Entities Game и GameGenre.Они имеют много-много отношений между собой.Я пытаюсь загрузить приборы и получаю следующую ошибку:
Не удалось определить тип доступа для свойства "games" в классе "App \ Entity \ GameGenre": свойство "games" в классе "App\ Entity \ GameGenre "можно определить с помощью методов" addGame () "," removeGame () ", но новое значение должно быть массивом или экземпляром \ Traversable, если дано" App \ Entity \ Game ".
Мой код следующий.
Game.php
<?php
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repository\GameRepository")
*/
class Game
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
protected $id;
...
/**
* @ORM\ManyToMany(
* targetEntity="App\Entity\GameGenre",
* inversedBy="games"
* )
*/
private $genres;
...
/**
* @return Collection|GameGenre[]
*/
public function getGenres() : Collection
{
return $this->genres;
}
public function addGenre(GameGenre $genre): self
{
if (!$this->genres->contains($genre)) {
$this->genres[] = $genre;
$genre->addGame($this);
}
return $this;
}
public function removeGenre(GameGenre $genre): self
{
if ($this->genres->contains($genre)) {
$this->genres->removeElement($genre);
$genre->removeGame($this);
}
return $this;
}
...
public function __construct()
{
$this->genres = new ArrayCollection();
}
}
GameGenre.php
<?php
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repository\GameGenreRepository")
*/
class GameGenre
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\ManyToMany(
* targetEntity="App\Entity\Game",
* mappedBy="genres"
* )
* @ORM\OrderBy({"name" = "ASC"})
*/
private $games;
...
/**
* @return Collection|Game[]
*/
public function getGames() : Collection
{
return $this->games;
}
public function addGame(Game $game): self
{
if (!$this->games->contains($game)) {
$this->games[] = $game;
$game->addGenre($this);
}
return $this;
}
public function removeGame(Game $game): self
{
if ($this->games->contains($game)) {
$this->games->removeElement($game);
$game->removeGenre($this);
}
return $this;
}
public function __construct()
{
$this->games = new ArrayCollection();
}
}
И, похоже, нет ничего странного в осветительных приборах yamls:
genre.yaml
App\Entity\GameGenre:
genre_{1..9}:
...
games: '@game_*'
game.yaml имеетнет упоминания о поле жанра, но я попытался изменить сторону отношения, вызвав addGenre () вместо addGame (), или использовать их оба в обоих файлах фикстур, но ничего не помогло, поэтому я думаю, что есть другая проблема.
Можетпожалуйста, помогите мне?