0

初めてのシンプルなアプリを作成していますが、Web 開発は初めてなので、DB 構造 (およびモデル) を適切に編成する方法についていくつか質問があります。

私のページの 1 つは俳優のフィルモグラフィーなので、表示する必要があります。

年、監督、説明など。また、現在の映画に関連する写真をいくつか表示する必要があります。

私の知る限り、データベースに 2 つのテーブルを作成する必要があります。ID と他のすべてのフィールド (年、ディレクター、説明) を持つ最初の 1 つ。フィルム ID と画像ファイル名のいくつかのフィールドを含む 2 番目のテーブル。それは正しい方法ですか?

しかし、このテーブルをリンクする方法と、この 2 つのテーブルからデータを取得してビューに送信する方法がわかりません。料理本を読んだが、初心者には簡単ではない.

誰かが私の要件に関連する例を教えてもらえますか?

4

2 に答える 2

3

2 つのテーブルが必要になると仮定するのは正しいです。簡単に設定するには、Cake の規則に従ってください。テーブルは複数です。また、自動更新フィールドcreatedmodifiedフィールドも使用します。テーブルは次のようになります (必要に応じて列を追加します)。

俳優

id
year
director
description
created # automatically filled in by cake
modified # automatically filled in by cake

画像

id
actor_id
path
created
modified

次に、関係を反映するようにモデルを更新します。ここに Actor hasMany Image があり、Image は Actor に属しています。

/app/Model/Actor.php

<?php
class Actor extends AppModel {
  public $hasMany = array('Image');
}

/app/モデル/Image.php

<?php
class Image extends AppModel {
  public $belongsTo = array('Actor');
}

Cake の規則を使用したので、自動的にテーブル、外部キーを認識し、find().

アクターのクイック インデックス アクションを作成します。

/app/Controller/ActorsController.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);
  }
}

ビューで、アクターを繰り返し処理し、必要に応じて情報を表示します! アクター名とテーブルの最初の画像を表示する非常に単純なビューの例を次に示します。

/app/View/Actors/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>

bakeこの作業の 99% は、Cake のシェルを使用して実行できます。モデル、コントローラー、およびビューが生成されます。その後、好きなようにカスタマイズできます。作業が楽になり、ベスト プラクティスのヒントも得られるので、Bake を機能させることを強くお勧めします。

于 2012-07-25T15:29:13.783 に答える
3

男、エンティティー・リレーションシップ・モデルについて検索して学びましょう。この質問は、PHP や CakePHP とは関係ありません。

あなたの質問に答えると、達成したいことに応じてデータを表現します

1.俳優は写真が多い

あなたが言ったように、2 つのテーブルが存在する可能性があります。それぞれのテーブルには、プライマリ キー (PK) とも呼ばれる一意の ID があります。そして、「1 対多」の関係 (または 1:n) を持つ 2 番目のテーブルには、最初のテーブルに関連する外部キー (FK) もあります。たとえば、id=4 のアクターは 4 つの画像 (id=1、2、5、9) を持つことができますが、それらすべてに外部キー (actor_id=4) があります。

構造は次のようになります。

Actors                        Pictures
----------------              -------------------
id (PK)                       id (PK)
name                          actor_id (FK)
address                       file_name
birth_date
...                    

このセットアップでは、俳優に関連する写真があります。しかし、あなたは映画について話したので、2 番目のオプションが必要になるかもしれません。

2.俳優には多くの映画があり、これらの映画には多くの写真があります

間に「フィルム」などの別のテーブルを追加すると、写真をこのテーブルに関連付けることができます。

したがって、たとえば、id=4 の同じ俳優と 2 つの映画 (id=2,6) があり、どちらも俳優 (actor_id=4) と同じ関係にあり、最初の映画には 2 つの写真 (id=1,2 film_id) があります。 =2) と、さらに 4 つの写真を含む 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
...

役に立ちましたか?

于 2012-07-25T15:24:47.727 に答える