【问题标题】:Multiple datasources for one model in CakePHPCakePHP 中一个模型的多个数据源
【发布时间】:2015-02-21 04:57:25
【问题描述】:

我有一个关于 CakePHP 的非常有趣的问题。我有一个客户目前在 eBay 上销售产品,并且也想开始在他们自己的网站上销售产品。那么,就会有两种不同的销售渠道:(1) eBay,和 (2) 网站。

但是,他们确实希望为客户提供无缝的网站体验。基本上,他们希望他们当前的 eBay 网站成为他们当前网站中的类别,并且他们当前的 eBay 拍卖物品可以在他们的网站上搜索。

一个简单的 CakePHP 网站会有两个表:products 和 categories,简单的表关系是“products belongsTo categories”和“categories hasMany products”。然后我将如何添加 eBay 类别和产品?基本上,我希望http://site/products/index 在产品表和 eBay 上返回所有产品的列表。我希望 http://site/categories/index 返回类别表中所有已定义类别的列表以及 eBay 上列出的类别项目。

eBay 有一个非常好的实时请求查询 API,所以我一直在考虑一个选项来执行此操作,但我想知道是否有更好的方法...我认为这个选项不会与 PaginatorComponent 配合得很好...

方法: (1)在beforeFind中,捕获请求参数并保存到一个持久化变量中 (2) 在afterFind中,根据请求参数向eBay API发起请求,然后手动将结果添加到$results数组中。

同样,我认为这适用于基本的查找操作,但我不确定这是否适用于分页,因为我不确定如何处理,例如,20 项页面限制(即我该如何处理当数据库中只有 18 个项目在第 1 页时,第 2 页,现在在第 2 页我需要从 19 而不是数据库中的 21 开始?)

这里有没有我忽略的 CakePHP 语法,还是我只是开始为所有这些可能性编写代码?

我在 CakePHP 2.6.0 平台上编码。

非常感谢您的帮助!

【问题讨论】:

  • 为什么不在您的数据库中从 e-bay 导入数据?我有一个应用程序可以处理六个数据源(beatport、soundcloud、twitter、facebook、GA、youtube)。后台应用程序定期检查远程源是否有任何更改并更新本地数据库。如果用户通过cms添加数据,应用更新远程源。
  • 最大的问题是:eBay产品信息变化非常快(尤其是价格,在拍卖结束时会每秒变化一次)。

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3


【解决方案1】:

一种可能的方法是从每个数据源中读取所有产品,在内存中对它们进行排序并从那里进行分页。产品的数量当然会在这里发挥重要作用。

第二个,如果产品的数量不经常变化,将涉及一个后台进程,从 eBay 检索他们的 ID 和最重要的数据,并将它们写入公共产品表,标记创建的行。 然后 Paginator 可以显示您的结果,但可以在撰写页面时从 eBay 即时检索标记产品的其他快速变化的数据。

【讨论】:

  • 所以,现在店铺规模小,流量少,我决定实施第一种方法。它工作得很好,我在模型中重载了 find() 函数。我基本上将 $options['limit']、$options['maxLimit'] 和 $options['page'] 读入局部变量,取消设置它们,运行 parent::find('all', $options)。然后我手动插入 eBay 商品,在每个 $options['order'] 上运行 array_multisort(),然后根据限制和分页信息运行 array_slice。
  • 效率低下,但在这个规模上我并不过分担心。如果规模扩大,我将不得不将数据写入表并实现 eBay 的推送 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多