DataFixtures phpunit symfony 类型的预期值改为"integer"



我正在使用DataFixtures和phpunit ControllerTest 但是当我使用phpunit tests/BankBundle/Controller/BankControllerTest.php我得到

Doctrine\ORM\ORMInvalidArgumentException:关联字段"BankBundle\Entity\entry#$user"的预期值为"BankBundle\Entity\user",改为"整数"。

我不知道如何解决它

这是我的数据夹具.php

<?php
namespace BankBundleDataFixtures;
use BankBundleEntityentry;
use DoctrineBundleFixturesBundleFixture;
use DoctrineCommonDataFixturesFixtureInterface;
use DoctrineCommonPersistenceObjectManager;
class BankFixtures implements FixtureInterface
{
public function load(ObjectManager $manager)
{
$bank = new entry();
$bank->setUser(123);
$manager->persist($bank);
$manager->flush();
}
}

实体 条目.php

class entry
{
/**
* @ORMId
* @ORMColumn(name="id",type="integer")
* @ORMGeneratedValue
*/
private $id;
/**
* @ORMManyToOne(targetEntity="user", inversedBy="id")
*/
private $user;
public function getUser()
{
return $this->user;
}
public function setUser($user)
{
$this->user = $user;
}
}

实体 用户.php

class user
{
/**
* @ORMId
* @ORMColumn(name="id",type="integer")
* @ORMGeneratedValue
*/
private $id;
/**
* @ORMColumn(name="balance",type="integer")
*/
private $balance;
public function getId()
{
return $this->id;
}
public function getBalance()
{
return $this->balance;
}
public function setId($id)
{
$this->id = $id;
}
public function setBalance($balance)
{
$this->balance = $balance;
}
}

你误解了inversedBy关系是如何运作的。如果反转关系,则需要在包含相关实体的其他实体上提供一个字段。这些应该是真实的实体,你不需要关心ids,因为教义会照顾到这一点。

由于您具有manyToOne关系,因此解决方案是在user类中添加一个属性,例如:

/**
* @ORMOneToMany(targetEntity="entry", mappedBy="user")
*/
private $entries;

在你的entry课上,关系将是:

/**
* @ORMManyToOne(targetEntity="user", inversedBy="entries")
*/
private $user;

请注意,您不需要反转属性,因此您也可以简单地更改entry类:

/**
* @ORMManyToOne(targetEntity="user")
*/
private $user;

反转关系的优点是,如果添加 getter,您可以一次性从用户那里获取所有条目:

$user->getEntries();

最新更新