2015-03-25 5 views
0

Я начинаю моделировать db/entity в symfony2. У меня есть две сущности. Сначала пользователь, а второй - группы. Я хочу подключить оба. Я думаю, что я должен использовать много разных отношений (?).sf2 - список всех групп с информацией, если пользователь присоединился к этой группе

Но моя главная проблема заключается в том, как я могу получить список всех групп с информацией, если пользователь присоединился к этой группе.

Группа Entity:

<?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="GroupBundle\Entity\Group"> 
     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
     </id> 
     <field name="name" type="string" column="name" length="50"/> 
     <field name="description" type="string" column="description"/> 
     <many-to-many field="users" mapped-by="groups" target-entity="AccountBundle\Entity\User"/> 
    </entity> 
</doctrine-mapping> 

и User Entity:

<?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="AccountBundle\Entity\User"> 
     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
     </id> 
     <field name="username" type="string" column="username" length="255"/> 
     <field name="password" type="string" column="password" length="255"/> 
     <field name="salt" type="string" column="salt" length="255"/> 
     <field name="email" type="string" column="email" length="255"/> 
     <field name="active" type="boolean" column="active"></field> 
     <field name="token" type="string" column="token" length="255"/> 
     <field name="lastLoginTime" type="datetime" column="lastLoginTime" nullable="true"/> 
     <field name="registerTime" type="datetime" column="registerTime"/> 
     <one-to-many field="events" target-entity="CoreBundle\Entity\Event" mapped-by="user" /> 
     <many-to-many field="groups" inversed-by="users" target-entity="GroupBundle\Entity\Group"> 
     <join-table name="UserGroups"> 
      <join-columns> 
       <join-column name="userId" referenced-column-name="id" /> 
      </join-columns> 
      <inverse-join-columns> 
       <join-column name="groupId" referenced-column-name="id" /> 
      </inverse-join-columns> 
     </join-table> 
    </many-to-many> 
    </entity> 
</doctrine-mapping> 

Там нет никакой связи между там еще, потому что я не знаю, что лучше. Может быть, мне нужно создать дополнительную сущность между подобным UserGroup?

D4V1D у вас есть право. Предполагается: пользователь может присоединиться ко многим группам, и группа может иметь много пользователей.

Okey Я добавляю отношения «многие ко многим». Надеюсь, я сделал все правильно.

И теперь. Это фрагмент моего контроллера:

$em = $this->getDoctrine()->getManager(); 
    $repo = $em->getRepository("GroupBundle\Entity\Group"); 
    $groups = $repo->findAll(); 

    $user = $this->getUser(); 
    $user_groups = $user->getGroups(); 


    foreach($user_groups as $user_group){ 
     /* @var $group Group */ 
     foreach($groups as $group){ 
      if($group->getId() == $user_group->getId()){ 
       $group->setUserInGroup(true); // of course i extend my entity file about extra set and get method. 
      } 
     }   
    } 

    return $this->render('GroupBundle:showAll.html.twig', array('groups' => $groups)); 

и вид:

{% for group in groups %} 
<div> 
    {{ group.name }} 
    {% if(group.getUserInGroup()) %} 
     <a href="#">join</a> 
    {% endif %} 
</div>  
{% endfor %} 

Я пытаюсь найти лучший и правильный способ сделать это.

+0

является группой ролей или что ??? Вам нужно разместить дополнительную информацию о типе отношений между ними. –

+0

Возможно, вам следует опубликовать код как ваших 'User', так и' Group'. Мы легко догадываемся, что многие «пользователи» могут присоединяться ко многим «группам», а «группы» могут иметь много «пользователей», но нам нужен часть вашего кода. – D4V1D

+0

Ребята, у вас есть право. Я добавил код. – shinji

ответ

0

Без отношения OneToMany с пользователем и группой, как вы присоединяетесь к группе с пользователем? в каком поле есть эта информация? вам нужно отношение да.

Группа объект: объект

<many-to-many field="users" target-entity="AccountBundle\Entity\User" mapped-by="groups" /> 

Пользователь:

<many-to-many field="groups" target-entity="GroupBundle\Entity\Group" inversed-by="users"/> 
+0

Я знаю, что должен добавить отношения. Я этого не делал, потому что не знаю, какой из них. Я писал об этом. Я редактирую свой пост и добавляю отношения на основе вашего предложения. Но до сих пор не знаю, как получить список всех групп с информацией, если зарегистрированный пользователь находится в группе. Мне нужно перечислить все группы и добавить его, чтобы присоединиться, если зарегистрированный пользователь еще не находится в группе. – shinji

+0

обновите свой вопрос с помощью действия вашего контроллера, где вы хотите получить группы, вы должны внедрить свой сеттер-получатель, тогда вы можете получить информацию об этой группе пользователей или перечислить все группы в репозитории, я помогу вам это сделать, но вам нужно будет увидеть ваши действие первое –

+0

Спасибо. Я делаю это, когда возвращаюсь домой. Вы уверены, что я должен использовать отношения «многие-к-одному» или «один ко многим» вместо многих-ко-многим? Или, может быть, я должен использовать промежуточную Entity liek UserGroup? Если я использую один-ко-многим, это не реплицирует мои записи в группе в db? [Пример] (https://atlas.mindmup.com/2015/03/cd115c90b5dd013203cc3a7e0739ca51/entitys_example/index.html) – shinji