假设我有一个YouTube风格的网站,但有图片而不是视频。每个用户可以一次上传多个图像。我想将图像存储在一个表中,并且我想将关于显示图像的页面的信息(图像的“辩论”页面)存储在另一个表中 - 这个有一个列我存储的外来ID在数据库中上传和引用的图像。
我应该创建两个模型并从同一个控制器中调用它们吗?
例如,我可以createDebateController
创建两个模型 - 一个用于存储辩论页面信息,另一个用于存储图像。这会合理吗?如果是,我如何将每个图像的id
存储在数据库中创建辩论页面信息的模型中?
答案 0 :(得分:0)
我会为每个创建一个模型,然后只通过其相关的图像对象引用辩论对象。因此,在发布新图片时:
$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);
}
}
答案 1 :(得分:0)
我认为你可能会使用两个独立的控制器。一个用于辩论,一个用于图像。您的辩论模型(假设一对多关系)应该有一组图像ID,或者如果您需要每个图像的放置或其他识别信息,可能还有一组图像描述符。如果您不需要放置信息,只需使用图像ID即可使用图像控制器生成指向每个图像的链接集合。如果确实需要放置(或描述等信息),则描述模型具有实际的图像ID。是的,可以在模型中显示与视图相关的关系。