我必须从不同的 Web 服务 + 我自己的数据库中获取数据,并在显示在网站上之前组合这些数据。
这样做的最佳方法是什么?我更喜欢为 Web 服务和数据库编写单独的模型。如何在不同的文件夹中组织不同数据源的模型类?
稍后我可能会添加更多网络服务。
我必须从不同的 Web 服务 + 我自己的数据库中获取数据,并在显示在网站上之前组合这些数据。
这样做的最佳方法是什么?我更喜欢为 Web 服务和数据库编写单独的模型。如何在不同的文件夹中组织不同数据源的模型类?
稍后我可能会添加更多网络服务。
编辑:我真的很抱歉,因为我下面的例子不起作用,因为你不能有同名的模型。您还应该在子目录中为它们添加前缀,例如:
这样你就可以将它们加载为
$this->load->model('webservice1/ws1_products');
$this->load->model('webservice2/ws2_products');
$this->load->model('db/db_products');
$this->load->model('products');
并用作
$x = $this->ws1_products->getAll();
$x = $this->ws2_products->getAll();
$x = $this->db_products->getAll();
$x = $this->products->getAll(); // combined result
编辑结束。
要将它们分隔在不同的文件夹中,只需将它们放在models
目录中的子文件夹中,然后使用通用语法$this->load->model('web_service1/products');
。
我不知道最好的方法,因为这是一个偏好问题,但如果我是你,我会按照你所说的将它们分成两种不同的模型并制作第三种,这会将它们组合成一个结果。因此,如果您必须从 2 个不同的服务和您的数据库中获取产品,我会制作 4 个模型:
这样,您只需从控制器向products
模型发出一个请求。
我通常为每个数据源做一个模型文件。无论是数据库表、Web 服务等。
为了在渲染之前组合来自 2 个或更多模型的数据,如果涉及业务逻辑,我喜欢在控制器中进行。如果不是,我会在模型中正确执行(您现在可以在 CI2 中从另一个模型加载一个模型)