DataFixtures 및 phpunit ControllerTest를 사용하고 있지만 phpunit tests / BankBundle / Controller / BankControllerTest.php를 사용할 때
Doctrine \ ORM \ ORMInvalidArgumentException : 연결 필드 "BankBundle \ Entity \ entry # $ user"에 대해 "BankBundle \ Entity \ user"유형의 예상 값이 대신 "정수"를 얻었습니다.
나는 그것을 고치는 방법을 모른다
이것은 내 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;
}
}
inversedBy
관계가 어떻게 작동 하는지 오해합니다 . 관계를 반대로하는 경우 관련 엔터티를 포함하는 다른 엔터티에 대한 필드가 필요합니다. 이것들은 실제 엔티티 여야하며, Doctrine이 처리 할 것이므로 id에 대해 걱정할 필요가 없습니다.
당신이 가지고있는 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;
역 관계의 장점은 getter를 추가하면 사용자로부터 한 번에 모든 항목을 가져올 수 있다는 것입니다.
$user->getEntries();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다