Я новичок в Symfony и Doctrine.У меня есть несколько разных связанных сущностей, но когда я пытаюсь связать их в Fixtures, я получаю исключение:
Ожидаемое значение типа «App \ Entity \ VehicleType» для поля ассоциации «App \»Entity \ Make # $ type ", вместо этого получил" Doctrine \ Common \ Collections \ ArrayColl
ection ".
Это, похоже, выдается, как только я вызываю $ manager-> flush ()во втором креплении.Я использовал генератор сущностей, чтобы установить их и отношения.После этого я добавил JoinColumn в аннотации ManyToOne.Эти отношения настроены так:
class VehicleType
{
/**
* @ORM\OneToMany(targetEntity="App\Entity\Make", mappedBy="type")
*/
private $make;
public function __construct()
{
$this->make = new ArrayCollection();
}
}
class make
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\VehicleType", inversedBy="make")
* @ORM\JoinColumn(name="type", referencedColumnName="code")
*/
private $type;
public function __construct()
{
$this->type = new ArrayCollection();
}
}
И приборы выглядят так:
class VehicleTypeFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$vehicleTypesData = AppFixtures::loadJSON('vehicle_types.json');
foreach($vehicleTypesData as $type) {
$vehicleType = new VehicleType();
$vehicleType->setCode($type->code);
$vehicleType->setDescription($type->description);
$manager->persist($vehicleType);
$this->addReference('type-'.$type->code, $vehicleType);
}
$manager->flush();
}
}
class MakeFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{
$makes = AppFixtures::loadJSON('makes.json');
foreach($makes as $make) {
$newMake = new Make();
$newMake->setCode($make->code);
$newMake->setDescription($make->description);
$type = (!empty($this->hasReference('type-'.$make->type)))
? $this->getReference('type-'.$make->type)
: false;
if ($type) {
$newMake->setType($type);
}
$manager->persist($newMake);
}
$manager->flush();
}
}
Я вижу в консоли, что они определенно выполняются в правильном порядке.Ясно, что я устанавливаю $this->make
и $this->type
в new ArrayCollection()
с в конструкторах, но это было добавлено генератором сущностей, и это похоже на то, что я хочу.
Когда я сбрасываю get_class
на объекте $type
в приборе Make я вижу, что это Proxies\__CG__\App\Entity\Type
, который должен быть правильным?
Редактировать: Моя схема выглядит следующим образом:
vehicle_type:
| code | varchar(10) | NO | PRI | NULL | |
| description | varchar(255) | NO | | NULL | |
make:
| code | varchar(10) | NO | PRI | NULL | |
| type | varchar(10) | YES | MUL | NULL | |
| description | varchar(255) | NO | | NULL | |