CakePHP - 访问多个表格的页面&类别

时间:2011-04-19 18:11:12

标签: php database cakephp cakephp-1.3

我正在建立一个拥有许多不同类别的网站,每个网站都有自己的控制器/模型/视图。

示例网站类别:餐饮,电影,夜生活,体育......等

我的控制器:餐馆,剧院,活动,文章,城市,用户......等等

我还有一个网站主页,它从所有网页中提取数据,以填充页面上的小方框。并且,每个类别都有自己的主页,也可以从不同的类别中提取数据 - 例如,在“电影”主页上,它也可能会引入影院附近的餐馆和体育赛事,也可能是文章中的一些近期文章模型......等等 - 有很多类别重叠。

如何设置?体育赛事根本不依赖于电影,所以我无法想象任何hasMany / belongsTo类型的关系 - 但我仍然需要访问数据。特别是在主页上,它根本没有表格,但需要从上述所有内容中提取数据。

6 个答案:

答案 0 :(得分:1)

听起来你需要实施components来处理各种类别。该组件将为任何给定页面提供类别框的访问权限(这将与类别主页不同)。

然后我将实现一个名为'category'的元素,您可以将信息传递给组件。我还会让所有组件导出类似的数据。这将使其简化,但仍然提供您正在寻找的灵活性。

总之,为每个类别创建组件:

  • DiningComponent
  • NighlifeComponent

将输出传递给要在页面上显示的category元素。

答案 1 :(得分:0)

您的问题太大而无法完整覆盖。我将解决跨不同控制器访问多个模型的问题。这可以通过多种方式完成。

关系:

$this->Event->City->find(); // relationship to City exists in Event Model

将其添加到控制器中的$uses属性:

var $uses = ('City');

根据需要加载到方法中:

function some_method() {
  App::import('Model', 'City');
  $this->City->find();

每个人都有自己的好处。您应该阅读有关Models in the CakePHP Book的更多信息。如果你有大量的关系,你应该检查LazyModel是否延迟加载你的模型。

答案 2 :(得分:0)

乍一看,也许你看不到另一种模式是总体的,但是你称之为“类别”的想法意味着它们必须是一类东西,可能是活动。新模型可能相当薄,但我可能会怀疑与活动模型有关的外观调度,因此您可以给它一个开始和结束发布日期。如果您不想将其称为“活动”,那么像“contentItem”这样的通用内容可能会让您在某处控制全局属性。另一个练习是比较现有模型并查找重复属性。什么是描述的重复属性?

答案 3 :(得分:0)

如果两个控制器之间没有关系,则可以使用loadModel函数

  

$这 - > loadModel( '富');   $这 - > Foo->栏();

当有关系的时候,你可以做到

  

$这 - > Foo->酒吧,>巴兹();

答案 4 :(得分:0)

答案 5 :(得分:0)

要了解CakePHP中有关数据模型的更多信息,您可以使用http://cakeApp.com在线模式构建器。