2015-10-19 40 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

相關問題