Правильное создание ассоциаций моделей CakePHP с MongoDB - PullRequest
1 голос
/ 19 июля 2011

Я занят тестированием моделей с MongoDB.У меня есть две модели: рецепт и тег. class Recipe extends AppModel { var $name = 'Recipe'; var $mongoSchema = array( 'name' => array('type' => 'string'), 'description' => array('type' => 'string'), 'tags' => array('type' => 'array'), //the tags "tag" value 'created' => array('type' => 'datetime'), 'modified' => array('type' => 'datetime'), ); var $hasAndBelongsToMany = array( 'Tag' => array( 'className' => 'Tag', 'joinTable' => 'recipe', 'foreignKey' => '_id', 'associationForeignKey' => 'tags', 'unique' => true, ) ); } class Tag extends AppModel { var $name = 'Tag'; var $mongoSchema = array( 'tag' => array('type' => 'string'), 'description' => array('type' => 'string'), 'created' => array('type' => 'datetime'), 'modified' => array('type' => 'datetime'), ); var $hasAndBelongsToMany = array( 'Recipe' => array( 'className' => 'Recipe', 'joinTable' => 'recipe', 'foreignKey' => 'tags', 'associationForeignKey' => '_id', 'unique' => true, ) ); }

Рецепт имеет много тегов и наоборот, но как мне правильно это представить, чтобы он корректно отображался с MongoDB через ассоциации CakePHP, поскольку модель HABTM и т. Д. Ретранслирует традиционные реляционные данные SQL?

Кроме того, как мне обеспечить правильное управление отношениями, когда мы либо удаляем рецепт, либо удаляем тег?

Я подозреваю, что мне придется создать поведение для управления отношениями.IE имеет hasReference и isReferenced так же, как hasOne, hasAndBelongsToMany и т. Д.

1 Ответ

0 голосов
/ 22 сентября 2011

В настоящее время нет источника данных MongoDB, который обрабатывает ассоциации моделей так, как вы ожидаете в CakePHP.С одной стороны, базы данных NoSQL концептуально не созданы для этого, во-вторых, архитектура CakePHP 1.x Model / Datasource сильно затрудняет реализацию таких разнообразных технологий баз данных.

Однако вы можете взглянуть на Литиевый каркас.Они реализовали полную «реляционную» поддержку MongoDB в своей модели архитектуры.

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