PHP主义多对多的最后一个标识符问题

时间:2010-08-27 14:06:33

标签: php doctrine many-to-many

尝试在学说中创建多对多链接时遇到小问题。

我在这里有一个简单的场景:定义了多对多关系的用户和角色。

$user = new User();
$user->username = 'greg';
$user->save();


$role = new Role();
$role->name = "Administrator";
$role->save();

$role_user = new Role_User();
$role_user->Role = $role;
$role_user->User = $user;
$role_user->save();

现在,我做了一些实验,我可以毫无问题地保存用户和角色。他们都有自动增量id,它工作正常。当我想创建关于“无法获取最后一个插入标识符”的异常的关系时,问题就开始了。

我无法更改数据库架构而且我没有通过YAML生成它 - 我通过'generateModelsFromDb'从现有数据库中反向设计模型。这就是这个表的样子:

CREATE TABLE  `ofp`.`Role_User` (
   `roles_id` bigint(20) NOT NULL,
   `users_id` bigint(20) NOT NULL,
   KEY `FK8B6B91F429A30245` (`roles_id`),
   KEY `FK8B6B91F429A6266F` (`users_id`),
   CONSTRAINT `FK8B6B91F429A6266F` FOREIGN KEY (`users_id`) REFERENCES `User` (`id`),
   CONSTRAINT `FK8B6B91F429A30245` FOREIGN KEY (`roles_id`) REFERENCES `Role` (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我得到的错误会建议为此表创建主键标识符有问题,但我不确定我是否需要一个(可能是唯一的键来消除重复项?)。

有人有线索吗?

2 个答案:

答案 0 :(得分:0)

您甚至不应该直接使用Role_User对象。请注意,它只是db-schema的一部分,而不是对象接口。

$role = new Role();
$role['name'] = 'role name';
$role->name   = 'role name';
$role->setName('role name'); // That won't work unless you're using Doctrine with
                             // Symfony (just notice)
$role->set('name', 'role name');

$user = new User();
$user['username'] = 'username';
$user['Roles'][] = $role;

$user->save();

那应该保存user对象,然后保存role,最后创建它们之间的关系。

答案 1 :(得分:0)

在多对多关系中设置refClass是必需的