Я слежу за поваренной книгой Symfony2 по безопасности ( Ссылка ), моя форма входа работает нормально, поэтому я сейчас пытаюсь управлять ролями.
У меня фактически есть 2 объекта: Пользователь и РольПользователь получил столбец роли (который является идентификатором роли) и Роль со столбцами idrole и namerole.
Так что я просто хочу установить отношение «многие к одному» (с объединением) между ними, чтобыполучить имя роли при входе пользователя в систему.
Я пытался добавить этот код в свой user.orm.xml:
<many-to-one field="role" target-entity="PcastRole">
<join-columns>
<join-column name="namerole" referenced-column-name="idrole" />
</join-columns>
</many-to-one>
Но я получил ошибку:
ORA-00904: "I0_"."IDROLE": invalid identifier
И я не нашел способа сбросить мой запрос на добавление, чтобы увидеть проблему.
Я добавлю вам свой запрос на вход в систему, если он вам нужен:
public function loadUserByUsername($login)
{
$q = $this
->createQueryBuilder('u')
->where('u.email = :email OR u.login = :login')
->setParameter('email', $login)
->setParameter('login', $login)
->getQuery()
;
try {
// The Query::getSingleResult() method throws an exception
// if there is no record matching the criteria.
$user = $q->getSingleResult();
} catch (NoResultException $e) {
throw new UsernameNotFoundException(sprintf('L\'adresse que vous avez saisie n\'est pas enregistrée "%s".', $login), null, 0, $e);
}
return $user;
}
Заранее благодарен за вашу помощь!
Я провел небольшое исследование по моей проблеме и обнаружил, что вы правы jperovic. Мне нужно создать отношение многие ко многим.
Я пытался сделать то же самое, что и поваренная книга, но я получил эту ошибку:
ORA-00904: "IM_USER"."ROLEUSER": invalid identifier
Так что с моим соединением что-то не так, но я не вижу, почемуat.
Мой User.orm.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Promocast\UtilisateurBundle\Entity\ImUser" table="IM_USER" repository-class="Promocast\UtilisateurBundle\Entity\ImUserRepository">
<id name="iduser" type="decimal" column="IDUSER">
<generator strategy="SEQUENCE"/>
</id>
<field name="adresseip" type="string" column="ADRESSEIP" length="25"/>
<field name="commentaires" type="string" column="COMMENTAIRES" length="4000"/>
<field name="datecreation" type="date" column="DATECREATION"/>
<field name="dateDebut" type="date" column="DATE_DEBUT"/>
<field name="dateExpire" type="date" column="DATE_EXPIRE"/>
<field name="email" type="string" column="EMAIL" length="100"/>
<field name="estactif" type="decimal" column="ESTACTIF"/>
<field name="fonctionutilisateur" type="string" column="FONCTIONUTILISATEUR" length="500"/>
<field name="idgroupe" type="decimal" column="IDGROUPE"/>
<field name="idparent" type="integer" column="IDPARENT"/>
<field name="nomrole" type="string" column="NOMROLE"/>
<field name="login" type="string" column="LOGIN" length="100"/>
<field name="mobile" type="string" column="MOBILE" length="25"/>
<field name="nom" type="string" column="NOM" length="500"/>
<field name="password" type="string" column="PASSWORD" length="100"/>
<field name="preferenceadministration" type="string" column="PREFERENCEADMINISTRATION" length="4000"/>
<field name="prenom" type="string" column="PRENOM" length="500"/>
<field name="telephone" type="string" column="TELEPHONE" length="25"/>
<many-to-many field="roleuser" inversed-by="iduser" target-entity="PcastRole">
<join-table name="IM_USER">
<join-columns>
<join-column name="iduser" referenced-column-name="IDUSER"/>
</join-columns>
<inverse-join-columns>
<join-column name="roleuser" referenced-column-name="IDROLE"/>
</inverse-join-columns>
</join-table>
</many-to-many>
</entity>
</doctrine-mapping>
И мой Role.orm.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Promocast\UtilisateurBundle\Entity\PcastRole" table="PCAST_ROLE">
<id name="idrole" type="integer" column="IDROLE">
<generator strategy="SEQUENCE"/>
</id>
<field name="nomrole" type="string" column="NOMROLE" length="250"/>
<many-to-many field="iduser" mapped-by="roleuser" target-entity="ImUser" />
</entity>
</doctrine-mapping>
И запрос создан:
SELECT t0.NOMROLE AS NOMROLE1, t0.IDROLE AS IDROLE2 FROM PCAST_ROLE t0 INNER JOIN IM_USER ON t0.IDROLE = IM_USER.roleuser WHERE IM_USER.iduser = :param1'
Спасибо заранее!