链接两个控制器get()cakephp

时间:2015-10-03 14:31:09

标签: php mysql cakephp cakephp-3.0

我想加入两个控制器。 我有一个带有视图功能的控制器文章:

public function view($id = null)
    {
       $article = $this->Articles->get($id, [
            'contain' => []
        ]);
        $this->set('article', $article);
        $this->set('_serialize', ['article']);
    }

每篇文章都有一个关联的用户。所以我有一个控制器用户。 现在我可以拥有该文章的user_id(在数据库中)。 是否可以使用Articles表中的user_id访问User表中的用户名?使用get()函数。

例如,我知道如何使用find():

$this->set('articles', $this->Articles->find('all')->contain(['Users']));

但是get()有可能吗?对于特定的文章。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您在用户表中有用户名字段:

class UsersTable extends Table
{

    public function initialize(array $config)
    {
        $this->displayField('username');

    }
}

文章表

class ArticlesTable extends Table
{

    public function initialize(array $config)
    {
        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);
    }
}

在你的文章控制器中:

public function view($id = null)
{
   $article = $this->Articles->get($id, [
        'contain' => ['Users']
    ]);
    $this->set('article', $article);
    $this->set('_serialize', ['article']);
}

在您的文章视图中

<?= $article->has('user') ? $this->Html->link($article->user->username, ['controller' => 'Users', 'action' => 'view', $article->user->id]) : '' ?>

答案 1 :(得分:1)

在get()函数中,只需将Users添加到contains数组:

'contain' => ['Users']