CakePHP 3:如何在index.ctp中显示每条记录的关联数据?

时间:2015-10-19 16:40:14

标签: php mysql cakephp

我有两个表artistspicturesartist hasMany paintings关系。

不是每个显示相关图片的艺术家都有单独的view.ctp。我只想在index.ctp文件中显示所有艺术家列出的每个相关图片(ID列表)。

在阅读了食谱和无数的线索之后,我完全感到困惑,并且不明白我必须如何做到这一点。 (我还是PHP和Cakephp的新手)

在单一艺术家的view( )功能中,我可以像这样轻松获得相关图片:

控制器:ArtistsController.php

..
public function view($id=null)
{
   $artist = $this->Artists->get($id, [
      'contain' => ['Paintings']
   ])
...
}

然后通过执行以下操作获取相应 view.ctp 中的所有内容:

view.ctp
<?php foreach ($artist->paintings as $paintings): ?>
<ul><li> <?= h($paintings->id) ?> </li></ul>
....
<?php endforeach; ?>

但是,我如何为表中列出的每位艺术家的 index.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; ?>

我知道它不是那样的,但我怎么去做呢? 我是否必须在Controllers index()函数中使用find()查询并在视图中检索结果之前存储结果?!我确实尝试了,但它没有显示任何内容,或者它显示了一个SQL查询本身,因为我搞砸了语法......

因此,在尝试了书中的各种事情并搜索了几个小时之后,似乎我在这里缺少一些基本的理解。我发现的所有类似问题都让我一无所获。

即使是暗示从哪里开始也会很棒!非常感谢!

1 个答案:

答案 0 :(得分:5)

好的我可以理解,我给你一个例子,它可以帮助你

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。