Codeigniter 2 + Datamapper ORM: Списки смежности, как установить отношение модели для него? - PullRequest
2 голосов
/ 24 июня 2011

Q: Как установить модели для списков смежности при использовании Datamapper ORM.Кто-нибудь испытал?Например, категория таблицы (id, name, has_parent_category_id).Спасибо за просмотр!

Пример таблицы,

Tbl Category

id | name | has_parent_category_id
1  | catA | 0
2  | catB | 0
3  | catC | 1
4  | catD | 2
5  | catE | 3

Документы находятся в http://datamapper.wanwizard.eu/pages/advancedrelations.html, и я обнаружил следующие "Self Relationships".Я не уверен, что это правильный путь!Я тестирую его.

Если у кого-то есть опыт работы со списками смежности, кодовыми модулями Datamapper ORM и не возражаете, оставив один практический пример, как это сделать, я был бы признателен за это!время!

1 Ответ

0 голосов
/ 31 июля 2011

(Примечание: я не очень много использовал DataMapper с тех пор, как передал управление WanWizard, но довольно долго поддерживал DMZ.)

Я вижу два возможных решения:

1) Предполагая, что любые две вершины могут иметь только одно общее ребро

В случае одного ребра на пару вершин вам не нужно делать ничего особенного. Просто создайте новую стандартную самоотношения (т.е. именованную), чтобы представить связь:

$has_many = array(

    'parent_category' => array(
        'class' => 'category'
        'other_field' => 'category'
    ),
    'category' => array(
        'other_field' => 'parent_category'
    )
);

Затем создайте свой объединяющий стол следующим образом:

name:    categories_parent_categories
columns: id | category_id | parent_category_id

Теперь вы можете легко сделать края такими:

$catA = new Category()
$catA->name = 'catA';
$catA->save();
$catB = new Category();
$catB->name = 'catB';
$catB->save();
$catA->save('parent_category', $catB);
// OR
$catA->save_parent_category($catB);

$catA->parent_category->get();
foreach($catA->parent_category as $parent) {
    echo $parent->name;
}

См. http://datamapper.wanwizard.eu/pages/save.html#Advanced для получения дополнительной информации о сохранении этих видов отношений.

2) Предполагая, что вам нужно несколько ребер на вершину

Это гораздо более сложный пример, но в основном он включает создание выделенного объекта для представления отношений, поскольку DataMapper не позволяет двум объектам связываться более одного раза для типа отношений .

Если вам нужен этот пример, дайте мне знать, и я что-нибудь напишу, или зацените http://datamapper.wanwizard.eu/pages/troubleshooting.html#Relationships.NtoM

...