Две модели для одного контроллера - PullRequest
0 голосов
/ 19 марта 2011

Допустим, у меня есть сайт в стиле YouTube, но с изображениями, а не с видео. Каждый пользователь может загрузить несколько изображений одновременно. Я хочу сохранить изображения в одной таблице, и я хочу сохранить информацию о странице, которая отображает изображения (страница «обсуждения») изображений, в другой таблице - в этой есть столбец, в котором я храню внешний идентификатор изображения, которые были загружены и указаны в базе данных.

Стоит ли создавать две модели и вызывать их с одного контроллера?

Например, я мог бы createDebateController создать две модели - одну для хранения информации о странице дебатов и одну для хранения изображений. Это было бы разумно? Если да, то как бы хранить id каждого изображения в модели, которая создает информацию о странице обсуждения в БД?

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Я думаю, что вы, вероятно, используете два отдельных контроллера независимо. Один для дебатов и один для изображений. Ваша модель дебатов (при условии отношения «один ко многим») должна иметь коллекцию идентификаторов изображений или, возможно, набор дескрипторов изображений, если вам требуется размещение или другая идентифицирующая информация для каждого изображения. Если вам не нужна информация о размещении, вы просто используете идентификаторы изображений для генерации коллекции ссылок на каждое изображение с помощью контроллера изображений. Если вам нужно размещение (или описание, и т. Д. Информация), тогда модель описания имеет фактический идентификатор изображения. Да, нормально иметь отношения между вашими моделями, которые открыты для просмотра.

0 голосов
/ 19 марта 2011

Я хотел бы создать модель для каждого, а затем ссылаться на объект обсуждения только через связанный с ним объект изображения.Таким образом, при публикации нового изображения:

$image = new Image();
$image->setImage($file);
$image->setName($name);
$image->save();

Затем, когда комментарий публикуется, вы используете объект изображения для косвенного создания объекта обсуждения:

$image->addDebate($user, $timestamp, $comment);

Или когдарендеринг отображаемой страницы:

foreach ($image->getDebates() as $debate) {
    $debate->print();
}

Ваш объект изображения получит прямой доступ к объекту обсуждения:

class Image
{

    public function addDebate($user, $timestamp, $comment)
    {
        $debate = new Debate();
        $debate->setImageId($this->id);
        $debate->setUser($user);
        $debate->setTimestamp($timestamp);
        $debate->setComment($comment);
        $debate->save();
    }

    public function getDebates()
    {
        return query("select * from debate where image_id = ?", $this->id);
    }

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