我想知道代码点火器中的模型是如何被使用的。
假设我在菜单项数据库中有几个表,我想查询不同控制器中每个表的信息。我是否为每个表创建不同的模型类并在其中布置函数?
谢谢!
答案 0 :(得分:2)
模型应包含用于检索数据并将数据插入数据库的所有功能。控制器将加载模型:
$this->load->model('model_name');
然后,控制器通过模型中定义的抽象函数获取视图所需的任何数据。
最好为每个表创建一个不同的模型,尽管它不是必需的。
您应该阅读有关MVC设计模式的信息,它由codeigniter和许多其他框架使用,因为它是高效的并允许代码重用。有关模型的更多信息,请参阅Codeigniter文档:
答案 1 :(得分:1)
CodeIgniter非常灵活,您可以自行决定。 user's guide没有说明您应该如何组织代码。
也就是说,为了保持代码清洁和易于维护,我建议您尝试将每个模型限制为处理单个表或至少单个数据库实体。您当然希望避免使用单个模型来处理数据库表的所有。
答案 2 :(得分:0)
根据我的口味,CodeIgniter在这里太灵活 - 我宁愿把它称为模糊。 CI“模型”没有规范,没有界面,它可以是不同的东西:
实体域对象,其中每个实例基本上代表一个表的记录。有时它是一个“贫血”的域对象,每个属性直接映射到DB列,几乎没有行为,很少或根本没有理解对象关系和“图形”(比如,DB中的外键只是PHP中的整数ID)。或者它也可以是具有所有商业智能的“丰富(或真实)域对象”,并且也知道关系:比如$person->getAccountId()
(返回int)我们有$person->getAccount()
;或许也知道如何坚持自己(也许还有完整的图表或相关对象 - 也许是一些“肮脏”的概念)。
服务对象,与对象持久性和/或一般数据库查询相关:是一个DataMapper,一个DAO等。在这种情况下,我们通常有一个单个实例(单例)对象(很少或没有状态),通常每个数据库表或每个域类一个。
当你在CI文档或论坛中阅读时,关于Person model
你永远不知道我们正在处理什么样的模式。更糟糕的是:经常是这些根本不同模式的混合。
根据我的经验,这种非正式/含糊不是特定于CI,而是PHP框架。