2

我必须从不同的 Web 服务 + 我自己的数据库中获取数据,并在显示在网站上之前组合这些数据。

这样做的最佳方法是什么?我更喜欢为 Web 服务和数据库编写单独的模型。如何在不同的文件夹中组织不同数据源的模型类?

稍后我可能会添加更多网络服务。

4

2 回答 2

3

编辑:我真的很抱歉,因为我下面的例子不起作用,因为你不能有同名的模型。您还应该在子目录中为它们添加前缀,例如:

  1. webservice1/ws1_products
  2. webservice2/ws2_products
  3. 分贝/分贝产品
  4. 产品

这样你就可以将它们加载为

$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 个模型:

  1. 网络服务1/产品
  2. webservice2/产品
  3. 分贝/产品
  4. products // 将它们组合成一个结果的模型

这样,您只需从控制器向products模型发出一个请求。

于 2012-07-06T20:45:39.900 回答
2

我通常为每个数据源做一个模型文件。无论是数据库表、Web 服务等。

为了在渲染之前组合来自 2 个或更多模型的数据,如果涉及业务逻辑,我喜欢在控制器中进行。如果不是,我会在模型中正确执行(您现在可以在 CI2 中从另一个模型加载一个模型)

于 2012-07-06T20:25:37.617 回答