Проблема с ролями в Symfony2 - PullRequest
1 голос
/ 12 марта 2012

Я слежу за поваренной книгой 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'

Спасибо заранее!

...