私は、1:M 双方向関連で教義 2 を使用して所有側に固執しようとしています。何らかの奇妙な理由で (少なくとも私にとっては奇妙です)、accountId
Insert ステートメントに値を取得できず、そのために失敗します。ここで何か間違ったことをしているかどうかはわかりません。
誰が何が起こっているのか指摘できますか。
** Zend Framework 2 + ubuntu + mysql を使用。
テーブル tAccounts キーはaccountId
、このテーブルが外部キーaccountId
を介して tAccountPasswordResetに接続されています
(所有側)。
class tAccountPasswordReset {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $Id;
/** @ORM\Column(type="integer") */
protected $accountId;
.......
.......
/**
* @ORM\ManyToOne(targetEntity="tAccounts", inversedBy="accountpasswordreset")
* @ORM\JoinColumn(name="accountId", referencedColumnName="accountId")
**/
private $accounts;
(裏面)
class tAccounts {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $accountId;
/** @ORM\Column(type="string") */
…………
/** @ORM\OneToMany(targetEntity="tAccountPasswordReset", mappedBy="accounts") */
private $accountpasswordreset;
public function __construct() {
/** Get the dependence rowset from the tAccountPasswordReset */
$this->accountpasswordreset = new ArrayCollection();
}
tAccountPaswordReset に行を挿入する ( accountId が null ではないことに肯定的です)
private function setResetToken($accountid) {
try {
$token = uniqid().uniqid(); /** Generate a unique token */
$newReset = new \Entity\Tables\tAccountPasswordReset();
$newReset->accountId = $accountid;
$newReset->resetToken = $token;
$this->entityManager->persist($newReset);
$this->entityManager->flush();
return $token;
} catch (Exception $e) {
throw $e;
}
}
(結果)
An exception occurred while executing '
INSERT INTO tAccountPasswordReset (accountId, resetToken, createTime, expTime)
VALUES (?, ?, ?, ?)' with params [null, "5273f94bd75f15273f94bd7641", "2013-11-01 14:56:11", "2013-11-02 14:56:11"]: SQLSTATE[23000]:
Integrity constraint violation: 1048 Column 'accountId' cannot be null