2015-10-19 67 views
2

我有两个表artistspicturesartist hasMany paintings关系。CakePHP 3:如何显示index.ctp中每个记录的关联数据?

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

看完食谱和bazillion线程后,我完全困惑,不明白我该怎么做。 (我还是很新的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; ?> 

我知道这不是真的那样工作,但我该怎么做呢? 我是否必须在控制器的index()函数中使用find()查询并将结果存储在视图中之前?我确实尝试过,但它没有显示任何内容,或者它本身显示了一个SQL查询,因为我搞乱了语法......

因此,在尝试书中的各种事情并寻找小时后,似乎我缺少一些基本的理解在我的大脑里。还有我发现的所有类似问题都让我无所适从。

即使从这开始的提示将是伟大的!非常感谢!

+0

在你看来,你想看到像索引数据?或者只想查看一个用户关联数据? –

+0

我不完全明白你的意思;)。 我想看到正常的index.ctp数据(所有艺术家的表格)以及与每位艺术家相关的所有绘画。所以表中所有用户的关联数据不仅仅是一个 – eve

+0

我的意思是你想在view.ctp页面中看到正常的index.ctp数据吗? –

回答

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

+1

而已! 带有paginate并包含在索引方法内部的部分是我缺少/不理解的部分。在视图中而不是<?= h($ pictures-> picture)?>我做了<?= h($ pictures-> id)?>,因为我需要id号。你的解释对理解连接非常有帮助!感谢bazillion! :d – eve

相关问题