Карта одного объекта или нескольких объектов? - PullRequest
1 голос
/ 10 января 2012

Как вы можете себе представить, поиск, включающий термины (в любой комбинации) "множественные, таблицы, объекты", возвращает множество страниц, которые не относятся к моему конкретному вопросу - и я не совсем уверен, как правильно сформулироватьэто, поэтому я приведу пример:

Скажем, у меня есть эти таблицы: «Пользователи», «Проекты» и «ProjectNotes».В любом конкретном представлении (работающем с шаблоном MVC) я могу захотеть вызвать информацию об одном или нескольких проектах и ​​отобразить информацию об их родительских пользователях и дочерних заметках - или ради более конкретного сценария, скажем, я хочуиметь представление, отображающее информацию об одном проекте вместе с его дочерними заметками и, возможно, ссылку на имя и фамилию родительского пользователя.

В таком сценарии я должен сопоставить один объект, который содержит все необходимые данныеи передать его представлению, или я должен сопоставить конкретный проект, использовать его внешний ключ 'user_id' для сопоставления соответствующего пользовательского объекта, сопоставить все дочерние заметки проекта как объекты и отправить эту группу объектов в представление?

Я благодарю вас за то, что вы уделили мне время.

1 Ответ

1 голос
/ 10 января 2012

Мне кажется, что в любом случае все в порядке. Но я бы склонялся к последнему: собрать все данные для каждой записи в один массив / объект и передать их в представление.

В конечном счете, специфика того, какие данные вам легко доступны в действии, зависит от ваших запросов, вашего ORM, графа объектов, который создается запросами / картографами / ORM и т. Д. Но при условии, что ваш объединенный запрос создает В проекте, в котором есть участники для Note и User, вы можете сделать что-то подобное в своем действии:

$project = $repository->getProject(); // however this is done
$this->view->projectData = array(
   'name' => $project->name,
   'date' => $project->date,
   'user_name' => $project->User->name,
   'user_email' => $project->User->email,
   'note' => $project->Note->content,
);

То есть представлению не нужно знать о графе объектов; эти знания находятся на уровне контроллера / действия и выше. Действие разворачивает данные из графика и превращает их в простую форму (массив) для представления для отображения.

Вы можете даже вставить это в промежуточный объект модели представления, представляющий $project - тот, который принимает объект / граф $project в конструкторе, но является неизменным и доступен только для чтения. Затем передайте этот объект модели представления в представление для рендеринга.

...