我正在创建一个网站,允许用户在他们的网页上添加许多不同的项目。这些项目可以彼此非常不同,例如文本,图像,数字等。为了处理这个,我有一个表,为每个项目存储一个条目。该表具有id,页面上项目的位置以及项目的类型。然后,我为每种类型的项目都有一个表格,其中包含有关该项目的更具体信息。
我想要做的是设置一个关联,这样当页面加载时,它会按顺序从主表中获取项目 - 这很简单 - 然后还从正确的特定信息表中获取相关信息
示例main_table可以是:
id | location | type
1 | 1 | text
2 | 2 | image
3 | 3 | plot
4 | 4 | question
文本项的表格可能如下所示:
id | text |
1 | aaa |
2 | bbb |
情节表可能如下所示:
id | type | datasets |
1 | bar | 3
2 | scatter | 2
那么,我可以设置一个关联,其中main_data模型从正确的表中提取一个相关文件吗?我可以设置一个单独的模型,根据传入的变量和set the source选择特定信息的表,但我不确定如何将带有类型信息的变量传递给模型,也不是我确定我是否正确接近这个?
由于
PS
我想到了显而易见的事情 - 将项目合并到一个表中,并且只为每个条目的每个项目都提供空字段。所以一个文本条目仍然会有情节列的列,但它们不会被填充,等等。但是,我希望减少对空间的浪费 - 除非每个人都认为它会更好。
答案 0 :(得分:1)
对不起,我没有评论澄清的声誉,但这是我对你的问题所做的。我认为你是在思考它......
关于你的问题,有一点是关于你接近它的方式会变得非常混乱。
在我看来,处理这个的最好方法是给每个项目输入它自己的表格,然后在模型定义中输入关联。
这就是你的表格的样子,记住CakePHP表格必须是复数,而user_id
是故意标题的。
id | username
1 | example
id | user_id | text
1 | 1 | this is a question
id | user_id | text
1 | 1 | this is plot
在您的app / Model文件夹中,您需要名为User.php
&的文件。 Question.php
& Plot.php
(单数命名约定)应该看起来像这样
<?php
public $hasMany = array(
'Question',
'Plot'
);
?>
<?php
public $belongsTo = 'User';
?>
<?php
public $belongsTo = 'User';
?>
完成上述设置后,您将能够轻松访问视图中的绘图和问题,我在下面提供了一个潜在用户控制器的片段以及您可以使用的预期用法...在CakePHP中使用debug()
非常棒。
<?php
...
public function index() {
$this->set('users', $this->paginate());
}
...
?>
<div>
<?php
foreach ($users as $user):
debug($user);
echo $user['Question']['text'];
echo $user['Plot']['text'];
endforeach;
unset($user);
?>
</div>
再次阅读您的问题后,请提及“订单”和“位置”。您可以通过向每个不同的表添加“date_created”和“page_position”列来处理此问题。我仍然觉得你的解决方案过于复杂,我希望我没有错过任何东西。