Model view controller 一个控制器的两个模型

Model view controller 一个控制器的两个模型,model-view-controller,Model View Controller,比如说,我有一个YouTube风格的网站,但是有图像而不是视频。每个用户一次可以上载多个图像。我想在一个表中存储图像,我想在另一个表中存储关于显示图像的页面(图像的“辩论”页面)的信息-这个表有一个列,我在其中存储在数据库中上载和引用的图像的外来ID 我应该创建两个模型并从同一个控制器调用它们吗 例如,我可以让createDebateController创建两个模型——一个用于存储辩论页面信息,另一个用于存储图像。这是否合理?如果是,我将如何在DB中创建辩论页面信息的模型中存储每个图像的id?我

比如说,我有一个YouTube风格的网站,但是有图像而不是视频。每个用户一次可以上载多个图像。我想在一个表中存储图像,我想在另一个表中存储关于显示图像的页面(图像的“辩论”页面)的信息-这个表有一个列,我在其中存储在数据库中上载和引用的图像的外来ID

我应该创建两个模型并从同一个控制器调用它们吗


例如,我可以让
createDebateController
创建两个模型——一个用于存储辩论页面信息,另一个用于存储图像。这是否合理?如果是,我将如何在DB中创建辩论页面信息的模型中存储每个图像的
id

我将为每个图像创建一个模型,然后仅通过其相关图像对象引用辩论对象。因此,在发布新图像时:

$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);
    }

}

我想你可能会使用两个独立的控制器。一个用于辩论,一个用于图像。您的辩论模型(假设一对多关系)应该有一组图像ID,或者如果您需要每个图像的位置或其他标识信息,可以有一组图像描述符。如果不需要放置信息,只需使用图像ID,使用图像控制器生成指向每个图像的链接集合。如果您确实需要放置(或描述等信息),那么描述模型具有实际的图像id。是的,可以在视图中显示模型之间的关系。

另一个快速问题,从一个模型调用另一个模型是否合理?您指的是什么模型?查看模型?图片作为辩论的一部分上传。我不明白我们怎么能有单独的控制器?@edwin-上传表单可以发回图像控制器上的方法,因此您的图像控制器将有
上传
显示
操作。辩论控制器生成一个视图,其中包含用于上传图像和向页面添加其他内容的表单。上传完成后(假设您完成了完整的帖子,而不是使用iframe或flash等),您将重定向回辩论控制器操作,以显示带有新图像的页面。上传表单需要在url中或作为隐藏字段包含辩论id,以便您知道要重定向回哪个辩论。