Структура базы данных для моделей CakePHP - PullRequest
1 голос
/ 20 марта 2010

Мы создаем веб-приложение для отслеживания данных с использованием CakePHP, и у меня возникли некоторые проблемы с правильной структурой базы данных. У нас есть компании, которые имеют много сайтов. Сайты имеют много образцов данных. Теги имеют и длинные сайты для многих.

Все настроено нормально. Проблема заключается в «ранжировании» сайтов по тегам. Нам нужно сохранить его в базе данных в виде архива. Я создал модель ранга, настроенную так:

rank (
    id (int),
    sample_id (int),
    tag_id (int),
    site_id (int),
    rank (int),
    total_rows)
)

Итак, вопрос в том, как создать ассоциации для тега, сайта и образца для ранжирования? Я изначально установил их как haveMany. Но возвращенные структуры не получают меня там, где я хотел бы быть.

Похоже:

[Site] => Array (
    [Sample] = Array(),
    [Tag] = Array()
)

Когда я действительно ищу:

[Site] => Array (
[Tag] = Array (
    [Sample] => Array (
        [Rank] => Array (
            ...data...
        )
    )
)
)

Я думаю, что я не могу правильно структурировать базу данных; поэтому, если мне нужно обновить, пожалуйста, дайте мне знать. Иначе, как мне написать запрос поиска, который приведет меня туда, где я должен быть? Спасибо!

Мысли? Нужно больше деталей? Просто спросите!

Ответы [ 2 ]

1 голос
/ 20 марта 2010

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

samples_tags (
id (int),
sample_id (int),
tag_id (int)
)

А также проверьте, правильно ли вы определили ассоциацию моделей. Подробнее см. HABTM в кулинарной книге .

1 голос
/ 20 марта 2010

Чтобы получить этот формат ...

Tag hasOne Sample Образец hasOne или hasMany Ранг

Альтернативой является «взлом модели», как я его называю, который в основном создает пользовательские методы с классом модели, которые выполняют пользовательские запросы и форматируют результаты по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...