1

Doctrine2 を使用してデータを db に挿入したいと考えています。
私は2つのテーブルを持っています:

users
 -name
 -password
 -enabled

groupmembers
 -groupname
 -username

新しいユーザーを作成したいので、両方のテーブルにデータを入れたいです。
私のクラス:

class Users
{
/**
 * @var string
 * @Id @Column(name="name", type="string", length=128, nullable=false)
 * @ORM\GeneratedValue(strategy="SEQUENCE")
 * @ORM\SequenceGenerator(sequenceName="users_name_seq", allocationSize=1, initialValue=1)
 */
private $name;

/**
 * @var string
 * @Column(name="password", type="string", length=254, nullable=true)
 */
private $password;

/**
 * @var string
 * @Column(name="enabled", type="string", nullable=false)
 */
private $enabled;

/**
* @OneToOne(targetEntity="GroupMembers", inversedBy="username")
* @JoinColumn(name="name", referencedColumnName="username")
**/
private $group;
}

.

class GroupMembers
{
/**
 * @Id @Column(type="string")
 */
protected $groupname;

/**
 *@Id @Column(type="string")
 */
protected $username;

/**
 * @OneToOne(targetEntity="Users", mappedBy="group")
 * @JoinColumn(name="username", referencedColumnName="name")
*/
protected $user;
}

そして私のコード:

<?php
// addUser.php
require_once "bootstrap.php";

$name = $argv[1];
$pass = "plain:".$argv[2];
$enabled = $argv[3];
$groupname = $argv[4];

$user = new Users();
$user->setName($name);
$user->setPassword($pass);
$user->setEnabled($enabled);

$group = new GroupMembers();
$group->setGroupName($groupname);
$group->setUserName($name);

$entityManager->persist($user);
$entityManager->flush();

$entityManager->persist($group);
$entityManager->flush();

echo "Your new User: ".$user->getName()."\n";

Not null violationそして、フィールドにエラーがありますname。ご覧のとおり、クラスにはこのフィールドによる OneToOne 関連付けがあります。
何が間違っている可能性がありますか?

アップデート

,cascade="persist"OneToOne アノテーションに追加し、コードを変更します。

<?php
// addUser.php
require_once "bootstrap.php";

$name = $argv[1];
$pass = "plain:".$argv[2];
$enabled = $argv[3];
$groupname = $argv[4];

$user = new Users();
$user->setName($name);
$user->setPassword($pass);
$user->setEnabled($enabled);

$group = new GroupMembers();
$group->setGroupName($groupname);
$group->setUserName($name);
$user->setGroup($group);


 $entityManager->persist($user);
 $entityManager->flush();

 echo "Your new User: ".$user->getName()."\n";

しかし、助けにはなりません。

4

1 に答える 1

1

ユーザー内:

/**
 * @var string
 * @Id @Column(name="name", type="string", length=128, nullable=false)
 * @ORM\GeneratedValue(strategy="SEQUENCE")
 * @ORM\SequenceGenerator(sequenceName="users_name_seq", allocationSize=1, initialValue=1)
 */
private $name;

する必要があります

/**
 * @var string
 * @Id
 * @Column(name="name", type="string", length=128, nullable=false)
 */
private $name;

説明: 有効な注釈ではない (行の先頭にない) ため、Column-Description は無視されます。また、シーケンスは文字列ユーザー名には意味がありません。

于 2013-09-06T08:38:29.977 に答える