Я пытаюсь реализовать шаблон Active Record для проекта ZF. Раньше я работал с подобным соглашением, и он хорошо работает.ActiveRecord и многие-многие отношения?
Но теперь моя проблема заключается в том, как обрабатывать отношения «многие ко многим» с моими моделями.
Вот пример:
Допустим я модель пользователя.
<?php
require_once 'MLO/Model/Model.php';
class Model_User extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'email' => NULL,
'password' => NULL,
);
}
Нет проблем.
Но что, если я добавлю модель группы?
require_once 'MLO/Model/Model.php';
class Model_Group extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'name' => NULL,
'desc' => NULL,
);
}
и
require_once 'MLO/Model/Collection.php';
class Model_Groups extends MLO_Model_Collection
{
protected $_modelClass = 'Model_Group';
}
У меня есть то есть картографа, который преобразует результаты из БД для моделирования объекта, и наоборот.
Мой вопрос в том, как обращаться со многими-ко-многим отношениями с моими моделями?
Где я должен хранить отношения?
Вот некоторые подсказки я думать о:
class Model_User extends MLO_Model_Model
{
protected $_data = array(
'id' => NULL,
'name' => NULL,
'desc' => NULL,
'groups' => NULL, // where groups will be an instance of the Model_Groups
);
}
С таким же подходом, где группа будет массив как:
array(3) {
[0]=>
array(3) {
["id"]=>
string(1) "9"
["name"]=>
string(1) "Guest"
["desc"]=>
string(1) "Some desc"
}
[1]=>
array(3) {
["id"]=>
string(1) "64"
["name"]=>
string(1) "Moderator"
["desc"]=>
string(1) "Some desc"
}
[2]=>
array(3) {
["id"]=>
string(1) "5"
["name"]=>
string(1) "Admin"
["desc"]=>
string(1) "Some desc"
}
}
Another идея?
P.S: Я не пытаюсь обрабатывать ACL или подобные вещи, это просто, к примеру.
Таким образом, вы должны назначить как страницы, так и теги (или «Пользователи и группы в моем примере») «Достоверные теги и страницы» и передать имя класса в массиве для ленивой загрузки объекта Tag/Page? Что не так с использованием объекта коллекции, который содержит объекты тегов/страниц? –
Конечно, вы можете использовать Collection ... :) Это совершенно то же самое - я просто привык делать это так, sry ... Проблема в том, что вы можете добраться до бесконечного цикла (загружать теги для страниц каждый объект страницы требует тегов , они загружаются, и каждый тег имеет Страницы, загружает Страницы ...), поэтому нужна ленивая загрузка. Также я бы рекомендовал использовать какой-то кеш для хранения результата, так как он мог бы получить интенсивную базу данных :) –