2016-11-11 15 views
0

私はCakePHP(バージョン3を使用)を初めて使用しています。私はCakeのブログチュートリアルを完了し、いくつかのカスタマイズを実験してきました。私が困惑しているのは、記事テーブルにカテゴリ列を追加することです。カテゴリIDを追加することはできますが、カテゴリ名が好きです。CakePHP:ビューに関連するデータを表示するために外部キーを使用する

Iは設定 "属する" 記事モデルに関係:

class ArticlesTable extends Table 

{

public function initialize(array $config) 
{ 
    parent::initialize($config); 
    $this->table('articles'); 
    $this->displayField('title'); 
    $this->primaryKey('id'); 
    $this->addBehavior('Timestamp'); 
    $this->belongsTo('Categories', [ 
     'foreignKey' => 'category_id', 
    ]); 
} 

Iはまた、記事のコントローラにおけるカテゴリのセット()メソッドを使用した:

public function index() 
{ 
    $articles = $this->paginate($this->Articles); 
    $this->set(compact('articles')); 
    $this->set('_serialize', ['articles']); 
    $this->set(compact('categories')); 
} 

私の記事のインデックスビューは次のとおりです。

<?php foreach ($articles as $article): ?> 
     <tr> 
      <td> 
       <?= $article->category_id ?> 
      </td> 
      <td>... 

"$ article-> category_id"をいくつかの異なるものに置き換えようとしましたが、成功しませんでした。私の最高の推測は次の通りでした:

$article['Categories']['id'] 

それはちょうど空の列を残します。私は間違って何をしていますか?

P.S.

How to find field through foreign key in cakephp3.x.x?

+1

あなたは、インデックス関数内$記事のデバッグ値を表示することができますか?デバッグ($ articles)を試してください。どのようにそこに来るのかを投稿します。 –

+1

@Jacekは、この場合にそれを行う方法を示しています。 @Manoharは、このタイプの問題をどのように解決するかについてのヒントを提供しています。 'debug'と' pr'を親友にしてください! –

+0

ありがとう、ManoharとGreg!後見では明らかですが、デバッグ機能を使用することはありませんでした。私のように、いくつかのケーキデバッグ知識から恩恵を受ける可能性があり、ここに便利なリンクだ、誰のために: http://book.cakephp.org/3.0/en/development/debugging.html –

答えて

1

モデル/表/ ArticlesTable.php

class ArticlesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     ... 
     $this->belongsTo('Categories', [ 
      'foreignKey' => 'category_id', 
     ]); 
     ... 
    } 
    ... 
} 

モデル/表/ CategoriesTable.ph P

class CategoriesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     ... 
     $this->hasMany('Articles', [ 
      'foreignKey' => 'category_id', 
     ]); 
     ... 
    } 
    ... 
} 
:私はここに同様の(しかし未回答)質問を見つけました

コントローラ/記事コントローラ.php

public function index() 
{ 
    $this->paginate = [ 
     'contain' => ['Categories'] 
    ]; 

    $articles = $this->paginate($this->Articles); 

    $this->set(compact('articles')); 
    $this->set('_serialize', ['articles']); 
} 

テンプレート/記事/ index.ctp

<?php foreach ($articles as $article): ?> 
    <tr> 
     <td> 
      <?= $article->category->name ?> 
     </td> 
    <td> 
<?php endforeach; ?> 

Here you can read more about Associations

+0

、ヤツェクをありがとう!それがトリックでした。私はAssociationでCakeのページを見ていましたが、コントローラーとビューの面で少し不足しているようでした。今、私はあなたのソリューションを見てきたこと、それはこのようになりますことは、私が行方不明になったものです。 http://book.cakephp.org/3.0/en/controllers/components/pagination.html#joining-additional-associations –

関連する問題