不确定我在哪里出错了。刚接触Doctrine,它可能很简单。
尝试将新注册用户保存到Account表,然后在相关的Profile表中创建一个条目,然后将Profile id存储在Accounts profile_id字段中。
我得到的错误是
Application error
Exception information:
Message: Class does not exist
Stack trace:
#0 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/Mapping/ClassMetadata.php(67): ReflectionClass->__construct('')
#1 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php(350): Doctrine\ORM\Mapping\ClassMetadata->__construct(false)
#2 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php(260): Doctrine\ORM\Mapping\ClassMetadataFactory->newClassMetadataInstance(false)
#3 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/Mapping/ClassMetadataFactory.php(169): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata(false)
#4 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/EntityManager.php(247): Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor(false)
#5 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/UnitOfWork.php(1222): Doctrine\ORM\EntityManager->getClassMetadata(false)
#6 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/UnitOfWork.php(1678): Doctrine\ORM\UnitOfWork->doPersist(1, Array)
#7 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/UnitOfWork.php(1252): Doctrine\ORM\UnitOfWork->cascadePersist(Object(GDS\Entity\Profile), Array)
#8 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/UnitOfWork.php(1201): Doctrine\ORM\UnitOfWork->doPersist(Object(GDS\Entity\Profile), Array)
#9 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Doctrine/ORM/EntityManager.php(454): Doctrine\ORM\UnitOfWork->persist(Object(GDS\Entity\Profile))
#10 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/application/controllers/MemberinfoController.php(81): Doctrine\ORM\EntityManager->persist(Object(GDS\Entity\Profile))
#11 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Zend/Controller/Action.php(516): MemberinfoController->registerAction()
#12 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('registerAction')
#13 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#14 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#15 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#16 /Library/Server/Web/Data/Sites/euphoriagaming/public_html/public/index.php(25): Zend_Application->run()
#17 {main}
控制器内的registerAction
if ($form->isValid($this->_request->getPost()))
{ // Valid input
$username = $this->getRequest()->getParam('username');
$email = $this->getRequest()->getParam('email');
$emailconfirm = $this->getRequest()->getParam('emailconfirm');
$password = $this->getRequest()->getParam('password');
$passwordconfirm = $this->getRequest()->getParam('passwordconfirm');
$pwdMD5 = md5($password);
$emailValidateString = md5($username);
$em = $this->entityManager;
$account = new GDS\Entity\Account;
$account->setUsername($username);
$account->setEmailaddress($email);
$account->setPassword($pwdMD5);
$account->setValidationstring($emailValidateString);
$account->setAccountvalidated(false);
$em->persist($account);
$em->flush();
$accounts = $account = $em->getRepository('GDS\Entity\Account')
->findOneBy(array('emailaddress' => $email));
// Set up initial profile db entry
$accountProfile = new GDS\Entity\Profile;
$accountProfile->setAccountId($accounts->getId());
$em->persist($accountProfile);
$em->flush();
$accountProfileDbEntry = $em->getRepository('GDS\Entity\Profile')
->findOneBy(array('AccountId' => $accounts->getId()));
$ProfileId = $accountProfileDbEntry->getId();
// Update the Account table entry with the profile Id
$account->setProfileId($ProfileId);
$em->persist($account);
$em->flush();
}
帐户实体
namespace GDS\Entity;
/**
* @Entity(repositoryClass="GDS\Entity\Repository\AccountRepository")
*/
class Account
{
public function setAccountvalidated($accountvalidated)
{
$this->accountvalidated = $accountvalidated;
}
public function getAccountvalidated()
{
return $this->accountvalidated;
}
public function setEmailaddress($emailaddress)
{
$this->emailaddress = $emailaddress;
}
public function getEmailaddress()
{
return $this->emailaddress;
}
public function setPassword($password)
{
$this->password = $password;
}
public function getPassword()
{
return $this->password;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getUsername()
{
return $this->username;
}
public function setProfileId($profile_id)
{
$this->profile_id = $profile_id;
}
public function getProfileId()
{
return $this->profile_id;
}
public function setValidationstring($validationstring)
{
$this->validationstring = $validationstring;
}
public function getValidationstring()
{
return $this->validationstring;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @var integer $id
* @Column(name="id", type="integer",nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @OneToOne(targetEntity="Profile", mappedBy="account", cascade={"persist"})
*/
private $profile_id;
/**
* @Column(type="string", unique=true, length="25", nullable=false)
*/
private $username;
/**
* @Column(type="string", length="25", nullable=true)
*/
private $password;
/**
* @Column(type="string", unique=true, length="75", nullable=false)
*/
private $emailaddress;
/**
* @Column(type="boolean", nullable=false)
*/
private $accountvalidated;
/**
* @Column(type="string", length="125", nullable=true)
*/
private $validationstring;
}
个人资料实体
namespace GDS\Entity;
/**
* @Entity(repositoryClass="GDS\Entity\Repository\ProfileRepository")
*/
class Profile
{
public function setAboutme($aboutme)
{
$this->aboutme = $aboutme;
}
public function getAboutme()
{
return $this->aboutme;
}
public function setAccountId($account_id)
{
$this->account_id = $account_id;
}
public function getAccountId()
{
return $this->account_id;
}
public function setContactnameBattlelog($contactname_battlelog)
{
$this->contactname_battlelog = $contactname_battlelog;
}
public function getContactnameBattlelog()
{
return $this->contactname_battlelog;
}
public function setContactnameGw2($contactname_gw2)
{
$this->contactname_gw2 = $contactname_gw2;
}
public function getContactnameGw2()
{
return $this->contactname_gw2;
}
public function setFirstname($firstname)
{
$this->firstname = $firstname;
}
public function getFirstname()
{
return $this->firstname;
}
/**
* @var integer $id
* @Column(name="id", type="integer",nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
public function setImageprofile($imageprofile)
{
$this->imageprofile = $imageprofile;
}
public function getImageprofile()
{
return $this->imageprofile;
}
public function setLastname($lastname)
{
$this->lastname = $lastname;
}
public function getLastname()
{
return $this->lastname;
}
public function setTeamspeakname($teamspeakname)
{
$this->teamspeakname = $teamspeakname;
}
public function getTeamspeakname()
{
return $this->teamspeakname;
}
public function setWebsite($website)
{
$this->website = $website;
}
public function getWebsite()
{
return $this->website;
}
/**
* @OneToOne(targetEntity="Account", inversedBy="profile", cascade={"persist"})
* @JoinColumn(name="account_id", referencedColumnName="id")
*/
private $account_id;
/**
* @Column(type="string", length="25", nullable=true)
*/
private $firstname;
/**
* @Column(type="string", length="25", nullable=true)
*/
private $lastname;
/**
* @Column(type="string", length="25", nullable=true)
*/
private $imageprofile;
/**
* @Column(type="string", length="50", nullable=true)
*/
private $website;
/**
* @Column(type="string", length="50", nullable=true)
*/
private $teamspeakname;
/**
* @Column(type="string", length="50", nullable=true)
*/
private $contactname_gw2;
/**
* @Column(type="string", length="50", nullable=true)
*/
private $contactname_battlelog;
/**
* @Column(type="text", length="500", nullable=true)
*/
private $aboutme;
}
答案 0 :(得分:0)
例如:
class Account
{
/**
* @OneToOne(targetEntity="Profile", mappedBy="account", cascade={"persist"})
*/
private $profile;
public function setProfile(Profile $profile)
{
$this->profile = $profile;
$profile->setAccount($this);
}
}
class Profile
{
/**
* @OneToOne(targetEntity="Account", inversedBy="profile", cascade={"persist"})
*/
private $account;
public function setAccount(Account $account)
{
$this->account = $account;
}
}
进入你的控制器:
$account = new GDS\Entity\Account;
$profile = new GDS\Entity\Profile;
$account->setProfile($profile);
$em->persist($account);
$em->flush();
个人资料实体会自动保留(cascade = {" persist"})
抱歉我的英语。