Доктрина PHP - проблема многих со многими последними идентификаторами - PullRequest
0 голосов
/ 27 августа 2010

У меня небольшая проблема при попытке создать ссылку «многие ко многим» в доктрине.

У меня есть простой сценарий: пользователь и роль с определенным отношением «многие ко многим».

$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();

Теперь я провел несколько экспериментов и могу без проблем сохранять пользователя и роль самостоятельно.У них обоих есть идентификаторы автоинкремента, и они работают нормально.Проблема начинается, когда я хочу создать связь с исключением: «Не удалось получить идентификатор последней вставки».

Я не могу изменить схему БД, и я не генерировал ее с помощью 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 голосов
/ 28 августа 2010

Установка refClass является обязательной в отношениях «многие ко многим»

0 голосов
/ 27 августа 2010

Вы даже не должны напрямую использовать объект Role_User.Обратите внимание, что это только часть вашей db-схемы, а не интерфейс объекта.

$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 и, наконец, создать связь между ними.

...