Вопрос

У меня есть несколько моделей, которые не в формате CakePhp по умолчанию

Пользователь (идентификатор, имя ....)

1 Harsha ...
2 John ....

блюда (идентификатор, название, цена ...)

1 "Cheese Pizza" 6
2 "Zinger Burger" 3

Рестораны (ID, имя, .....)

1 "KFC" ...
2 "Pizza Hut" ...

Модуль (идентификатор, имя) значения (пользователь, блюда, рестораны)

1 "Users"
2 "Dishes"
3 "Restaurant"

Элементы (ID, module_id, item_id)

1 1 1 (refers to User Harsha)

2 3 2 (refers to Pizza hut)

3 2 2 (refers to Zinger Burger)

4 1 2 (refers to User John)

где item_id относится к идентификатору пользователей, блюда или отдыха в зависимости от Module_ID


Отзывы (ID, Parent_id, Обзор, время, item_id, commenter_id)

1 0 "Best Burger in the world" "time" 3 1 (refers to Harsha reviewing Zinger Burger)

2 1 "Yes i love Zingers tooo" time 3 2 ( refers to John replying to Harsha's Review)

Я немного изучил, как нарисовать отношения в CakePhp

Это было полезно?

Решение

В книге на этой странице: http://book.cakephp.org/view/1039/ Удача --матричаются-models-togther Вы найдете руководство по возможным ключам, которые вы можете установить на отношения, например

Иноструктура: имя внешнего ключа, найденного в другой модели. Это особенно удобно, если вам нужно определить множественные отношения Hasony. Значение по умолчанию для этой клавиши - подчеркивание, единственное имя текущей модели, суффиксировано «_ID». В приведенном выше примере он будет по умолчанию «user_id».

Предполагая, что обзоры и предметы являются детьми в их ассоциациях, для обоих концов отношений, вы бы установили инострудку как «item_id».

Что-то вроде:

dishes:
class Dish extends AppModel {
    var $name = 'Dish'; 
    var $hasMany = array(
        'Item' => array(
            'className'     => 'Item',
            'foreignKey'    => 'item_id',
            ...
items:
class Item extends AppModel {
    var $name = 'Item'; 
    var $belongsTo = array(
        'Dish' => array(
            'className'     => 'Dish',
            'foreignKey'    => 'item_id',
            ...
            ),

        'Restaurant' => array(
            'className'     => 'Restaurant',
            'foreignKey'    => 'item_id',
            ...

Трудно быть точнее, но вы не предоставили какой-либо Datamodel. Чтобы обрабатывать выбор модели через модуль, вам нужно будет писать какой-нибудь код в модели где-то, какие (ы) зависит от того, как вы получаете доступ к данным.

Тем не менее, это выглядит для меня, как хорошее время для реструктуризации базы данных!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top