我有两个表artists
和pictures
与artist hasMany paintings
关系
而不是单独的视图。显示相关图片的每个艺术家的CTP。我只想显示索引中的所有内容。ctp文件列出的所有艺术家与每个人的相关图片(id列表)。
在阅读了烹饪书和无数的线程之后,我完全困惑了,不明白我为什么要这样做。(我对PHP和Cakephp还很陌生)
在单个艺术家的view( )
函数中,我可以轻松地获得相关图片,如下所示:
Controller: ArtistsController.php
..
public function view($id=null)
{
$artist = $this->Artists->get($id, [
'contain' => ['Paintings']
])
...
}
然后在相应的视图中获取所有内容。ctp
view.ctp
<?php foreach ($artist->paintings as $paintings): ?>
<ul><li> <?= h($paintings->id) ?> </li></ul>
....
<?php endforeach; ?>
但是我如何为索引做类似的事情呢?ctp/index()函数为表中列出的每个艺术家?所以我可以这样写:
<?php foreach ($artists as $artist): ?>
<tr><td> <?= h($artist->name) ?> </td></tr>
<tr><td> <?php foreach ($artist->paintings as $paintings): ?>
<ul><li> <?= h($painting->id) ?> </li></ul>
<?php endforeach; ?>
</tr></td>
<?php endforeach; ?>
我知道它实际上不是那样工作的,但是我该怎么做呢?我是否必须在控制器索引()函数中使用find()查询并在视图中检索结果之前存储结果?!我确实尝试过,但它要么不显示任何内容,要么显示SQL查询本身,因为我搞砸了语法…
所以在尝试了书中的各种东西并搜索了几个小时之后,我似乎在我的大脑中缺少了一些基本的理解。而且我发现的所有类似的问题都让我一无所获。
甚至一个提示从哪里开始将是伟大的!非常感谢!
好的,我给你一个例子,它可能会帮助你。
有two table 1) artists 2) pictures
。
艺术家有2个字段id,name
和图片有3个字段id,artist_id,picture
//这里artist_id已经建立了艺术家和图片之间的关系。
这里的艺术家与图片有很多关系,所以我们将在Model'Table'ArtistsTable.php
public function initialize(array $config)
{
parent::initialize($config);
$this->table('artists');
$this->displayField('name');
$this->primaryKey('id');
$this->hasMany('Pictures', [
'foreignKey' => 'artist_id'
]);
}
那么Controller'ArtistsController.php
index method
应该像下面的代码
public function index()
{
$this->paginate =[
'contain' => ['Pictures'] //with artists We also fetch pictures
];
$this->set('artists', $this->paginate($this->Artists));
$this->set('_serialize', ['artists']);
}
现在在Template'Artists'index.ctp
中,你可以像下面的代码获取数据
<?php foreach ($artists as $artist): ?>
<?= h($artist->name) ?> // fetch artists name from artists table
<?php foreach ($artist->pictures as $pictures): ?>
<?= h($pictures->picture) ?> // fetch pictures according to artists
<?php endforeach; ?>
<?php endforeach; ?>
现在你得到了像
这样的输出jondu 1 2 3
这里jondu是一个名字,他有3张照片1,2,3。