Php Symfony 3.0。注意:未定义索引:name
我有两个实体。用户和用户权限,由多通单向关联映射。当我尝试创建一个具有特定用户权限的新用户时(在表中创建之前并且已经存在),我得到了错误“注意:在第670行的vendor\doctor\orm\lib\doctor\orm\Persisters\Entity\BasicEntityPersister.php中未定义的索引:name(…)”。以下是我的实体: 使用者 用户权限:Php Symfony 3.0。注意:未定义索引:name,php,doctrine-orm,symfony,Php,Doctrine Orm,Symfony,我有两个实体。用户和用户权限,由多通单向关联映射。当我尝试创建一个具有特定用户权限的新用户时(在表中创建之前并且已经存在),我得到了错误“注意:在第670行的vendor\doctor\orm\lib\doctor\orm\Persisters\Entity\BasicEntityPersister.php中未定义的索引:name(…)”。以下是我的实体: 使用者 用户权限: /** * @ORM\Entity(repositoryClass = "AppBundle\Repository\U
/**
* @ORM\Entity(repositoryClass = "AppBundle\Repository\UserRightsRepository")
* @ORM\Table(name = "user_rights")
*/
class UserRights
{
/**
* @ORM\Column(type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @ORM\Column(type = "string", length = 20, unique = TRUE)
*/
protected $name;
控制器:
/**
* @Route("/create/user", name="create/user")
*/
public function createUserAction()
{
$em = $this->getDoctrine()->getManager();
$userRights = $em->getRepository('AppBundle:UserRights')->findOneByName('Admin');
$department = $em->getRepository('AppBundle:Departments')->findOneByName('CN');
$user = new Users();
$user->setId('josm');
$user->setName('John');
$user->setSurname('Smith');
$user->setEmail('cos@gmail.com');
$user->setIsActive(TRUE);
$user->setUserRights($userRights);
$user->setDepartment($department);
$em->persist($user);
$em->flush();
return new Response(dump($user));
}
使用dump($user)时,一切看起来都很好。当我尝试使用persist+flush将新创建的用户放入数据库时,问题就开始了
考虑到语法,没有错误,所以我认为我在这里做错了什么。我假设这里的问题是关联或
unique=true
。我读过很多主题,几乎所有的主题都是关于错误的语法-产品而不是产品,客户而不是客户等。我检查了几次拼写,我确信它是正确的。好的。我已将referencedColumn=“name”
更改为referencedColumn=“id”
,并使用了条令:schema:update--force命令,它成功了。但是,我希望在我的用户表中将管理员、用户等而不是1、2等视为用户权限。知道如何解决此问题吗?请尝试将$name
标记为@ORM\Id
,因为据我所知,条令要求引用的列是标识符。它现在可以工作了,但是,symfony希望我在创建依赖项或用户权限时也设置Id,尽管我已将它们标记为“自动”。我不知道为什么会发生这种情况。也许数据库没有正确配置以生成标识符?尝试发布您收到的特定错误,也可以根据您的数据库尝试IDENTITY
/SEQUENCE
而不是AUTO
。
/**
* @Route("/create/user", name="create/user")
*/
public function createUserAction()
{
$em = $this->getDoctrine()->getManager();
$userRights = $em->getRepository('AppBundle:UserRights')->findOneByName('Admin');
$department = $em->getRepository('AppBundle:Departments')->findOneByName('CN');
$user = new Users();
$user->setId('josm');
$user->setName('John');
$user->setSurname('Smith');
$user->setEmail('cos@gmail.com');
$user->setIsActive(TRUE);
$user->setUserRights($userRights);
$user->setDepartment($department);
$em->persist($user);
$em->flush();
return new Response(dump($user));
}