Cakephp4, how to load associated data in an Entity object?

554 Views Asked by At

I have a Users table and a Roles table. A user has one role. So in UsersTable.php:

   $this->belongsTo('Roles', [
            'foreignKey' => 'role_id',
            'joinType' => 'INNER',
        ]);

Now in User.php (Entity!!) I need the role name of the users role. But I have only the User Entity in which is no associated data. I now have:

    public function getRole()
    {
        $q = TableRegistry::getTableLocator()->get('Roles');
        $roles = $q->find('list')->toArray();
        return $roles[$this->role_id];
    }

This works, but TableRegistry is marked obsolete in cake4, and I can't find any other way the make this work. What is the propper way of doing this?

1

There are 1 best solutions below

1
On BEST ANSWER

If you want to use both the User and Role data in a controller you can just do for example

    $user = $this->Users->get($id, [
        'contain' => ['Roles'],
    ]);

and the resulting object has $user->role defined as a Role entity.

However, I have a feeling you already know this and have another issue that may or may not overlap with a problem I was solving just recently. Check out ndm's answer to my question here and hopefully it helps you! CakePHP 4.1 User entity as authorization identity associated fields

Apologies if that's not your scenario, I just found this current thread while looking for an answer to my problem, and it was definitely the closest to my own issue.