I would like to join two controllers. I have a controller Articles with a view function :
public function view($id = null)
{
$article = $this->Articles->get($id, [
'contain' => []
]);
$this->set('article', $article);
$this->set('_serialize', ['article']);
}
Each article has an associated user. So I have a controller Users. Now I can have the user_id for the article (in database). Is it possible to access the username in the User table with the user_id in the Articles table? With a get() function.
For example I know how to do it with find() :
$this->set('articles', $this->Articles->find('all')->contain(['Users']));
But is it possible with get()? For a particular article.
Thanks!
if you have username field in users table:
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->displayField('username');
}
}
Articles table
class ArticlesTable extends Table
{
public function initialize(array $config)
{
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
}
}
In your Articles controller:
public function view($id = null)
{
$article = $this->Articles->get($id, [
'contain' => ['Users']
]);
$this->set('article', $article);
$this->set('_serialize', ['article']);
}
in your articles view
<?= $article->has('user') ? $this->Html->link($article->user->username, ['controller' => 'Users', 'action' => 'view', $article->user->id]) : '' ?>
In the get() function, just add Users to the contain array:
'contain' => ['Users']