在哪里放置连接多个表的SQL查询?

时间:2016-03-02 17:29:21

标签: php mysql tablemodel

我正在使用MVC框架并拥有photo SQL表和album SQL表。 photo表的查询位于photoTableModel类中,album表的查询位于albumTableModel类中。

我在哪里放置使用这两个表的查询?

例如,以下查询使用两个表。我是否将查询放在photoTableModelalbumTableModel,一个新的表格模型中,或者甚至是服务中?

SELECT `photo`.`id`
     , `photo`.`name`
  FROM `photo`
  JOIN `album`
    ON `album`.`album_id` = `photo`.`album_id`
   AND `album`.`album_id` = 1
     ;

1 个答案:

答案 0 :(得分:2)

架构的中心是模型,而不是表格。在语义上,在这里描述或操作哪个模型?

出现以检索照片列表,其中一些相册信息包含在该列表的元素中。所以我怀疑这与Photo逻辑模型有关。因此,只要将其置于架构和框架中,它就应该在语义上与该模型相关。

框架如何定义事物取决于该框架,所以我真的不能更具体。不同的框架以不同的方式做不同的事情。但是,一般而言,在MVC模式中,您希望围绕模型构建逻辑和体系结构。你从这个查询得到的是一张照片列表(带有一些额外的信息),所以它与照片模型有关。

模型可以是表的一对一表示。但他们并不需要。看起来你人为地限制你的模型正是如此,这导致了这个问题。也许你扩展Photo模型概念以包含专辑信息?也许你创造了一个DTO,它是两者的混合体?也许您在Album模型中添加Photo属性?组织模型有很多方法。关键是要保持这些模型的语义。模型代表域概念(如Photo),而非数据库表(如photoTableModel)。数据库表只是保留模型信息以便稍后重新构建。因此,数据库是域的 edge 关注点,而不是中心域。