CakePHP – 数据库结构和模型


CakePHP – Database structure and models

我正在构建我的第一个也是简单的应用程序,但由于我是Web开发的新手,我对如何正确组织我的数据库结构(和模型(有一些疑问。

我的一个页面是演员电影,所以我需要显示:

年份、导演、描述等而且我还需要显示一些与当前电影相关的图片。

据我所知,我需要在我的数据库中制作 2 个表。第一个带有 ID 和所有其他字段(年份、董事、描述(的字段。第二个表包含胶片 ID 和一些图像文件名字段。这是正确的方法吗?

但是我不明白如何将这些表链接在一起,以及何时从这两个表中检索数据并将其发送到视图。我读了一本食谱,但对于新手来说并不简单。

有人可以给我一个与我的要求相关的示例吗?

假设您需要 2 张表是正确的。为了最简单的配置,请遵循 Cave 的约定。表格是复数形式。我们还将使用自动更新的createdmodified字段。您的表格将如下所示(根据需要添加额外的列(:

演员

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
...

它对你有帮助吗?