我正在建立一个拥有许多不同类别的网站,每个网站都有自己的控制器/模型/视图。
示例网站类别:餐饮,电影,夜生活,体育......等
我的控制器:餐馆,剧院,活动,文章,城市,用户......等等
我还有一个网站主页,它从所有网页中提取数据,以填充页面上的小方框。并且,每个类别都有自己的主页,也可以从不同的类别中提取数据 - 例如,在“电影”主页上,它也可能会引入影院附近的餐馆和体育赛事,也可能是文章中的一些近期文章模型......等等 - 有很多类别重叠。
如何设置?体育赛事根本不依赖于电影,所以我无法想象任何hasMany / belongsTo类型的关系 - 但我仍然需要访问数据。特别是在主页上,它根本没有表格,但需要从上述所有内容中提取数据。
答案 0 :(得分:1)
听起来你需要实施components
来处理各种类别。该组件将为任何给定页面提供类别框的访问权限(这将与类别主页不同)。
然后我将实现一个名为'category'的元素,您可以将信息传递给组件。我还会让所有组件导出类似的数据。这将使其简化,但仍然提供您正在寻找的灵活性。
总之,为每个类别创建组件:
将输出传递给要在页面上显示的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在线模式构建器。