DataFixtures phpunit symfony类型的预期值改为“整数”

时间:2019-10-18 09:17:39

标签: php symfony phpunit fixtures

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

  

Doctrine \ ORM \ ORMInvalidArgumentException:关联字段“ BankBundle \ Entity \ entry#$ user”的类型为“ BankBundle \ Entity \ user”的期望值,改为“ integer”。

我不知道如何解决

这是我的DataFixtures.php

<?php

namespace BankBundle\DataFixtures;

use BankBundle\Entity\entry;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

class BankFixtures implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $bank = new entry();
        $bank->setUser(123);
        $manager->persist($bank);
        $manager->flush();
    }
}

实体 entry.php

class entry
{
    /**
     * @ORM\Id
     * @ORM\Column(name="id",type="integer")
     * @ORM\GeneratedValue
     */
    private $id;
    /**
     * @ORM\ManyToOne(targetEntity="user", inversedBy="id")
     */
    private $user;

    public function getUser()
    {
        return $this->user;
    }
    public function setUser($user)
    {
        $this->user = $user;
    }

}

实体 user.php

class user
{
    /**
     * @ORM\Id
     * @ORM\Column(name="id",type="integer")
     * @ORM\GeneratedValue
     */
    private $id;
    /**
     * @ORM\Column(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;
    }
}

1 个答案:

答案 0 :(得分:1)

您误解了inversedBy关系的工作原理。如果反转关系,则需要在另一个包含相关实体的实体上的字段。这些应该是真实的实体,您无需担心id,因为Doctrine会解决这一问题。

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

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

在您的entry类中,关系为:

/**
 * @ORM\ManyToOne(targetEntity="user", inversedBy="entries")
 */
private $user;

请注意,您不需要反向属性,因此您也可以只更改entry类:

/**
 * @ORM\ManyToOne(targetEntity="user")
 */
private $user;

反关系的优点是,如果添加吸气剂,您可以一次性从用户获得所有条目:

$user->getEntries();