Расширение пользователя SonataAdmin с помощью поля ManyToMany
В настоящее время я пытаюсь расширить Пользователь SonataUserBundle, чтобы добавить новые отношения ManyToMany с существующей сущностью.
Я расширил пользователя на основе ответа, найденного здесь - Расширение пакета пользователей Sonata и добавление новых полей.
User.php
/**
* @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")
**/
private $pledgedOn;
// (...) generated getters and setters here
Pledge.php
/**
* @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")
**/
private $pledgedUsers;
// (...) generated getters and setters here
Первое, что я заметил при синхронизации схемы, это то, что она создает 2 сводные таблицы вместо одной: pledge_user
а также user_pledge
, Я пытался добавить @ORM\JoinTable
в, но это просто меняет имя одного. Когда я добавляю то же самое @ORM\JoinTable
к обоим я получаю ошибку "таблица уже существует".
Когда я пытаюсь получить доступ к списку пользователей в админ, я получаю большую ошибку SQL
An exception occurred while executing 'SELECT count(DISTINCT u0_.id) AS sclr0 FROM User u0_ LEFT JOIN fos_user_user_group f2_ ON u0_.id = f2_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f2_.group_id':
SQLSTATE[42703]: Undefined column: 7 ERROR: column u0_.id does not exist
Я уверен, что это что-то простое, но я чмокаю головой, находя источник этой проблемы. Что я упустил?
Полный User.php: http://pastebin.com/TXunsgm1
Полный Pledge.php: http://pastebin.com/Mta6aiVm
1 ответ
Я знал, что это была ошибка дерпи. я имел
* @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")
а также
* @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")
Один из них должен был быть mappedBy
вместо inversedBy
, Изменение второго на
* @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", mappedBy="pledgedUsers")
исправил проблему.