我正在构建我的第一个也是简单的应用程序,但由于我是Web开发的新手,我对如何正确组织我的数据库结构(和模型(有一些疑问。
我的一个页面是演员电影,所以我需要显示:
年份、导演、描述等而且我还需要显示一些与当前电影相关的图片。
据我所知,我需要在我的数据库中制作 2 个表。第一个带有 ID 和所有其他字段(年份、董事、描述(的字段。第二个表包含胶片 ID 和一些图像文件名字段。这是正确的方法吗?
但是我不明白如何将这些表链接在一起,以及何时从这两个表中检索数据并将其发送到视图。我读了一本食谱,但对于新手来说并不简单。
有人可以给我一个与我的要求相关的示例吗?
假设您需要 2 张表是正确的。为了最简单的配置,请遵循 Cave 的约定。表格是复数形式。我们还将使用自动更新的created
和modified
字段。您的表格将如下所示(根据需要添加额外的列(:
演员
id
year
director
description
created # automatically filled in by cake
modified # automatically filled in by cake
图像
id
actor_id
path
created
modified
现在,更新模型以反映关系。你在这里有很多Actor的图像,而Image属于Actor。
/app/model/actor.php
<?php
class Actor extends AppModel {
public $hasMany = array('Image');
}
/app/model/Image.php
<?php
class Image extends AppModel {
public $belongsTo = array('Actor');
}
由于我们使用了 Cabe 的约定,因此当您执行find()
时,它会自动知道表、外键并拉取关系。
我们将为您的演员制作快速索引操作。
/app/Controller/ActorController.php
<?php
App::uses('AppController', 'Controller');
class ActorsController extends AppController {
public function index() {
// get all actors and their images
$this->Actor->recursive = 1;
$actors = $this->Actor->find('all');
// send to view as a variable named '$actors'
$this->set('actors', $actors);
}
}
在您看来,循环访问Actor并根据需要显示信息!下面是一个非常简单的视图示例,该视图显示表中的参与者姓名和第一个图像。
/app/View/Actor/index.ctp
<table>
<thead>
<tr>
<th>Name</th>
<th>Image</th>
</tr>
</thead>
<tbody>
<?php
foreach ($actors as $actor) {
$name = $this->Html->tag('td', $actor['Actor']['name']);
// show first image
$img = $this->Html->image($actor['Image'][0]['path']);
$image = $this->Html->tag('td', $img);
echo $this->Html->tag('tr', $name.$image);
}
?>
</tbody>
</table>
99%的工作都可以通过使用Cake的bake
壳来完成。它将为您生成模型、控制器和视图。然后,您可以根据需要进入并自定义它们。我真的建议让烘焙工作,因为它会让你的生活更轻松,甚至为你提供最佳实践提示。
伙计,搜索并了解实体关系模型。这个问题与PHP或CakePHP无关。
回答您的问题,您根据要实现的目标来表示您的数据
1.演员有很多画面
正如您所说,可能有两个表:每个表都有一个唯一的 id,也称为主键 (PK(。第二个表具有"一对多"关系(或 1:n(,该表还具有与第一个表相关的外键 (FK(。例如,id=4 的 actor 可能有四张图片 (id=1,2,5,9(,但所有图片都有外键 (actor_id=4(
结构如下所示:
Actors Pictures
---------------- -------------------
id (PK) id (PK)
name actor_id (FK)
address file_name
birth_date
...
通过此设置,您可以获得与演员相关的图片。但是你谈到了电影,所以你可能需要第二种选择。
2.演员有很多电影,这些电影有很多图片
在两者之间添加另一个表,例如"电影",您可以将图片与此表相关联。
例如,id=4 的同一演员和两部与演员关系相同的电影 (id=2,6( (actor_id=4(,第一部电影有两张图片 (id=1,2 film_id=2(,第二部电影有另外四张图片 (id=3,4,5,6 film_id=6(
Actors Films Pictures
---------------- ------------------- -------------------
id (PK) id (PK) id (PK)
name actor_id (FK) film_id (FK)
address name file_name
birth_date year
...
它对你有帮助吗?