У меня есть проект Symfony, в котором есть 2 объекта – Building и Building_type. Они связаны с однонаправленной ассоциацией ManyToMany. Поэтому, когда я пытаюсь получить доступ к моему контроллеру, у меня есть эта ошибка:
The target-entity Farpost\StoreBundle\Entity\Building_type cannot be found in 'Farpost\StoreBundle\Entity\Building#building_types'.
Farpost / StoreBundle / Entity / Building.php:
namespace Farpost\StoreBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * */ class Building { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="alias", type="string", length=255) */ protected $alias; /** * @var string * * @ORM\Column(name="number", type="string", length=255) */ protected $number; /** * @ORM\ManyToMany(targetEntity="Building_type") * @ORM\JoinTable(name="buildings_types", * joinColumns={@ORM\JoinColumn(name="building_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="building_type_id", referencedColumnName="id")} * ) */ protected $building_types; public function __construct() { $this->building_types = new ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set alias * * @param string $alias * @return Building */ public function setAlias($alias) { $this->alias = $alias; return $this; } /** * Get alias * * @return string */ public function getAlias() { return $this->alias; } /** * Set number * * @param string $number * @return Building */ public function setNumber($number) { $this->number = $number; return $this; } /** * Get number * * @return string */ public function getNumber() { return $this->number; } /** * Add building_types * * @param \Farpost\StoreBundle\Entity\Building_type $buildingTypes * @return Building */ public function addBuildingType(\Farpost\StoreBundle\Entity\Building_type $buildingTypes) { $this->building_types[] = $buildingTypes; return $this; } /** * Remove building_types * * @param \Farpost\StoreBundle\Entity\Building_type $buildingTypes */ public function removeBuildingType(\Farpost\StoreBundle\Entity\Building_type $buildingTypes) { $this->building_types->removeElement($buildingTypes); } /** * Get building_types * * @return \Doctrine\Common\Collections\Collection */ public function getBuildingTypes() { return $this->building_types; } /** * Add buildings_types * * @param \Farpost\StoreBundle\Entity\Buildings_types $buildingsTypes * @return Building */ public function addBuildingsType(\Farpost\StoreBundle\Entity\Buildings_types $buildingsTypes) { $this->buildings_types[] = $buildingsTypes; return $this; } /** * Remove buildings_types * * @param \Farpost\StoreBundle\Entity\Buildings_types $buildingsTypes */ public function removeBuildingsType(\Farpost\StoreBundle\Entity\Buildings_types $buildingsTypes) { $this->buildings_types->removeElement($buildingsTypes); } /** * Get buildings_types * * @return \Doctrine\Common\Collections\Collection */ public function getBuildingsTypes() { return $this->buildings_types; } }
Farpost / StoreBundle / Entity / Building_type.php:
namespace Farpost\StoreBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * * @ORM\Entity * */ class Building_type { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="alias", type="string", length=255) */ protected $alias; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set alias * * @param string $alias * @return Building_type */ public function setAlias($alias) { $this->alias = $alias; return $this; } /** * Get alias * * @return string */ public function getAlias() { return $this->alias; } }
Farpost / APIBundle / Controller / DefaultController.php:
public function listAction($name) { $repository = $this->getDoctrine()->getManager() ->getRepository('FarpostStoreBundle:Building'); $items = $repository->findAll(); $response = new Response(json_encode($items)); $response->headers->set('Content-Type', 'application/json'); return $response; }
Кроме того, доктрина app / console: schema: validate output:
[Mapping] OK - The mapping files are correct. [Database] OK - The database schema is in sync with the mapping files.
Поскольку имя объекта содержит знак подчеркивания _
и автозагрузчик PSR-0 попытается найти его в Farpost/StoreBundle/Entity/Building/type.php
.
Вам необходимо переименовать свой класс в BuildingType
и поместить его в Farpost/StoreBundle/Entity/BuildingType.php
Кроме того, убедитесь, что ваш composer.json
имеет соответствующие записи, указывающие на правильное пространство имен. Мой не сделал, вызвав эту ошибку.