2 つのテーブルが必要になると仮定するのは正しいです。簡単に設定するには、Cake の規則に従ってください。テーブルは複数です。また、自動更新フィールド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 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 を機能させることを強くお勧めします。