stackoverflow に関する最初の質問です。少し緊張しています。
だから、ここに状況があります:私はDoctrine 2をウェブサイトに使用しています。アプリケーションで適切なライブラリと適切なパスを使用して、ナシなしで適切にインストールしました。コードを書き始める前にDBを作成したので、リバースエンジニアリングの方法(doctrine exporter)でマッピング(念のためxml&yml)を作成しました。生成されたマッピングは問題ありません。その後、エンティティ ファイルを自分で作成しました (コンソールは機能しませんでした)。
/** @Entity */
class Member {
/** @Id @Column(type="string", nullable=false) */
private $login;
/** @Column(type="string", nullable=false) */
private $password;
/** @Column(type="string") */
private $mail;
/** */
private $dateregister;
/** */
private $datelastconnexion;
/** @Column(type="string") */
private $description;
/** */
private $birthday;
/** @Column(type="string") */
private $website;
/** @Column(type="boolean") */
private $activated;
/** @Column(type="integer") */
private $idstatus;
/** @Column(type="integer") */
private $idcountry;
/** @Column(type="integer") */
private $idlang;
/** @Column(type="integer") */
private $idarticle;
/** @Column(type="integer") */
private $idfilters;
public function __construct($login) {
$this->login = $login;
$this->activated = false;
}
public function getLogin() {return $this->login;}
public function getPassword() {return $this->password;}
public function getMail() {return $this->mail;}
public function getDateregister() {return $this->dateregister->format('Y/m/d');}
public function getDatelastconnexion() {if ($this->datelastconnexion == null) return 'Never logged';
else return $this->datelastconnexion->format('Y/m/d H:i');}
public function getDescription() {return $this->description;}
public function getBirthday() {return $this->birthday->format('Y/m/d');}
public function getWebsite() {return $this->website;}
public function getActivated() {return $this->activated;}
public function getStatus() {return $this->idstatus;}
public function getCountry() {return $this->idcountry;}
public function getLang() {return $this->idlang;}
public function getArticles() {return $this->idarticle->toArray();}
public function getFilters() {return $this->idfilters->toArray();}
public function setLogin($newLogin) {$this->login = $newLogin;}
public function setPassword($newPassword) {$this->password = sha1($newPassword);}
public function setMail($newMail) {$this->mail = $newMail;}
public function setDateregister($newDate) {$this->dateregister = $newDate;}
public function setDatelastconnexion($newDate) {$this->datelastconnexion = $newDate;}
public function setDescription($newDescription) {$this->description = $newDescription;}
public function setBirthday($newDate) {$this->birthday = $newDate;}
public function setWebsite($newWebsite) {$this->website = $newWebsite;}
public function setActivated($activate) {$this->activated = $activate;}
public function setStatus($newStatus) {$this->idstatus = $newStatus;}
public function setCountry($newCountry) {$this->idcountry = $newCountry;}
public function setLang($newLang) {$this->idlang = $newLang;}
public function setArticles($newArticles) {$this->idarticle = $newArticles;}
public function setFilters($newFilters) {$this->idfilters = $newFilters;}
}
データベースに何かを挿入しようとしましたが、小さな問題でブロックされました: メンバーが登録しようとすると、いくつかの情報 (ログイン、パスワードなど) を入力します。情報が正しいかどうかを確認するためにすべてのテストを行い、正しい場合は、新しいオブジェクト メンバーを作成します。このオブジェクト メンバーには、指定されたすべての情報が入力され、自動的に生成されます。次に、オブジェクトに対して persist() を呼び出し、次に flush() を呼び出します。
$newMember = new Member($login);
$newMember -> setPassword($passwd);
$newMember -> setMail($mail);
$newMember -> setDateregister($currentDate);
$newMember -> setDescription($description);
$newMember -> setBirthday($newBirthday);
$newMember -> setStatus($status[0]); // existing object
$newMember -> setCountry($country[0]); // existing object
$newMember -> setLang($lang[0]); // existing object
$doctrineManager->persist($newMember);
$doctrineManager->flush($newMember);
データベースを調べてみると、入力された ID が '' (空の文字列) であり、$login ではないことがわかりました。だから...それが私の質問です:それはどのように可能ですか? フラッシュする前に Member のすべてのプロパティを埋めていなかったからですか? または、エンティティ間の関係 (1 対多、多対多、多対 1) に関する情報を提供しませんでしたか? それとも何か?私は今この問題に1週間取り組んでいますが、理解できませんでした。
詳細については :
- $status、$lang、$country は外部キーです。
- $article と $filters は多対多の関係です。
読んでくれてありがとう、そして(願わくば)私の間違いを説明してくれてありがとう。