尝试在学说中创建多对多链接时遇到小问题。
我在这里有一个简单的场景:定义了多对多关系的用户和角色。
$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;
我得到的错误会建议为此表创建主键标识符有问题,但我不确定我是否需要一个(可能是唯一的键来消除重复项?)。
有人有线索吗?
答案 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是必需的