Две таблицы базы данных связаны двумя разными способами ...? - PullRequest
0 голосов
/ 02 июня 2011

Я вроде как почесал голову от этого.Вот сценарий.Я использую файлы схемы Doctrine и YAML:

У меня есть таблица Пользователь и таблица Событие

Пользователь выглядит так:

User:
    columns:
        id:
            type: integer(7)
        email:          
            type: string(100)
        display_name:
            type: string(255)
        fb_id:
            type: string(100)
    relations:
        Event:
            type: many
            refClass: UserEvent

Событие выглядит так:

Event:
    columns:
        id:
            type: integer(7)
        initiator_id:          
            type: integer(7)
        loc_latitude: 
            type: decimal(11)
        loc_longitude: 
            type: decimal(11)
        4sq_id:
            type: integer(11)
    relations:
        User:
            type: one
            local: initiator_id
            foreign: id
        User:
            type: many
            refClass: UserEvent

Как видите, проблема заключается в следующем: пользователь (или «инициатор») может запустить много событий, а событие может принадлежать одному пользователю («инициатору»).Однако к событию может также присоединиться много пользователей, и пользователь может присоединиться ко многим событиям.

Таким образом, событие и пользователь оказываются связанными в двух разных модах.Как это работает?Можно ли сделать это таким образом или я что-то упустил?

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Я думаю, вам просто нужно одно отношение «многие ко многим» между двумя таблицами.UserEvent скажет вам, какие пользователи имеют какие события (и наоборот) ... и присоединение через UserEvent и добавление WHERE user.id = event.initiator_id предоставит вам доступ к инициированным пользователем событиям, если они также принадлежат этим событиям.1001 *

0 голосов
/ 02 июня 2011

Вы можете просто добавить таблицу event_attendees с идентификатором события и идентификатором пользователя в качестве двух столбцов?Или это не вопрос

...