Cakephp Отношения - PullRequest
       11

Cakephp Отношения

1 голос
/ 27 октября 2010

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

user (id, name ....)

1 Harsha ...
2 John ....

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

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

рестораны (идентификатор, имя, .....)

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

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

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

items (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

1 Ответ

1 голос
/ 27 октября 2010

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

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

Предполагая, что обзоры и элементы являются дочерними в их ассоциациях, для обоих концов отношений вы установили ForeignKey как «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',
            ...

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

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

...