Reputation: 5299
I want to insert data into db using Doctrine2.
I have two tables:
users
-name
-password
-enabled
groupmembers
-groupname
-username
I want to create a new user so i want put data in both tables.
My classes:
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;
}
And my code :
<?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";
And i have an error Not null violation
on field name
. As you see classes have OneToOne association by this field.
What can be wrong?
UPDATE
i add ,cascade="persist"
to OneToOne annotation and change code:
<?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";
But not help.
Upvotes: 1
Views: 862
Reputation: 364
In 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;
should be
/**
* @var string
* @Id
* @Column(name="name", type="string", length=128, nullable=false)
*/
private $name;
Explanation: Your Column-Description is ignored, because it isn't a valid annotation (not on beginning of line). Also the sequence doesn't make sense for your string-username.
Upvotes: 1