【问题标题】:Link two controllers get() cakephp链接两个控制器 get() cakephp
【发布时间】:2015-10-03 14:31:08
【问题描述】:

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

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() 可以吗?对于特定的文章。

谢谢!

【问题讨论】:

  • 你的问题不清楚。您需要通过用户 id 获取一些文章吗?
  • 对于一篇文章,我想写作者的用户名,而不仅仅是id。 user_id 在 Article 表中。以及用户表中的用户名。
  • 那么,您想按用户名搜索文章吗?
  • 我只想在视图函数中看到用户名。现在在一篇文章中,我可以有:“由 1 撰写的文章”,我想要“由管理员撰写的文章”。其中 Admin 是 user_id=1

标签: php mysql cakephp cakephp-3.0


【解决方案1】:

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

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]) : '' ?>

【讨论】:

  • 有效!非常感谢!多亏了你,我学到了很多东西。
【解决方案2】:

在 get() 函数中,只需将用户添加到包含数组中:

'contain' => ['Users']

【讨论】:

  • 我试过了。我有这个错误:“文章与用户没有关联”
  • 那你需要关联表:)
  • 是的,有外键
  • 我在文章中的 user_id 和用户中的 id 之间有一个级联的外键。但我有同样的错误。我应该用 cakephp 更新一些东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
相关资源
最近更新 更多