多くのUserPropertiesへの参照を持つUserクラスを永続化しようとすると、私は奇妙な問題を抱えています。 UserPropertyはカスケードによって管理されることに注意してください。Doctrine2 strange persist例外
UserProperties自体にはプロパティへの参照があります。
(自身がプロパティを既存のへの参照を持っている)新しいUserPropertyで新しいユーザーを作成する場合は(私はそれを期待していなかったのように奇妙な)それは奇妙なスローエラー: InvalidArgumentException:新しいエンティティました
class User extends IdentifiableObject {
// … other vars
/**
* @OneToMany(targetEntity="UserProperty", mappedBy="user", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $userProperties = null;
public function __construct() {
$this->userProperties = new ArrayCollection();
}
// … other methods
public function getUserProperties() {
return $this->userProperties;
}
public function setUserProperties($userProperties) {
$this->userProperties = $userProperties;
}
public function addUserProperty(UserProperty $userProperty) {
$userProperty->setUser($this);
$this->userProperties[] = $userProperty;
}
}
UserProperty:
カスケードに構成されていなかった関係 'UserPropertyの#のプロパティ' で見つかったエンティティユーザーの操作を持続
class UserProperty extends IdentifiableObject {
/**
* @OneToOne(targetEntity="Property")
* @JoinColumn(name="propertyID")
*/
private $property;
public function getProperty() {
return $this->property;
}
public function setProperty($property) {
$this->property = $property;
}
}
プロパティクラスには、いずれのクラスも参照されていません。 PHPUnitのを使用して
そして最後に、私のTestClassを:
class UserDaoTest extends PHPUnit_Framework_TestCase {
private static $userDao;
private static $propertyDao;
public static function setUpBeforeClass() {
//this will make the EntityManager called inside our DAOImpl point to our test database...
define('__DBNAME__', 'db_test');
createCleanTestDatabase();
self::$userDao = new UserDaoImpl();
self::$propertyDao = new PropertyDaoImpl();
}
public function testEntityClassVariable() {
$this->assertEquals("User", self::$userDao->getEntityClass());
}
public function testPersistUserWithoutProperties() {
$user = new User();
$user->setUserName("tester1");
$user->setUserType(1);
self::$userDao->persist($user);
self::$userDao->flush();
$this->assertEquals(1, count(self::$userDao->findAll()));
}
public function testPersistUserWithProperties() {
$user = new User();
$user->setUserName("tester2");
$user->setUserType(1);
$property = new Property();
$property->setName("propertyName");
$property->setType(1);
self::$propertyDao->persist($property);
self::$propertyDao->flush();
$userProperty = new UserProperty();
$userProperty->setProperty($property);
$userProperty->setValue("test");
$user->addUserProperty($userProperty);
self::$userDao->persist($user);
self::$userDao->flush();
$this->assertEquals(2, count(self::$userDao->findAll()));
$userInDB = self::$userDao->find($user);
$this->assertNotNull($userInDB);
$this->assertEquals(1, count($userInDB->getUserProperties()));
}
}
奇妙なことは、プロパティが実際にデータベースに作成されていることです。私はuserDao-を使用している場合 はまた、テストは完全に正常に動作します>すべてのヘルプは、事前に感謝をいただければ幸いです...ではなくpropertyDaoの(プロパティを保存するために
を持続!