relationship between user and category OctoberCMS

934 Views Asked by At

how to establish a relationship between the user and the category?

A category has more than one user, and a user belongs to a category

I add category_id in the user table

on the frontend I display the list of users with the plugin builder but I also want to display the category of the user

I use the RainLab user plugin

Help me please,

thank you in advance

2

There are 2 best solutions below

0
On BEST ANSWER

it seems you need to extend user model and add category relation runtime

You need to add this code to your plugin's boot method

public function boot()
{
    //Extending User Plugin
    \RainLab\User\Models\User::extend(function($model) {

        $model->hasOne['category'] = 'HardikSatasiya\Plugin\Models\Category';

    });
}

this code will add dynamic relation to user model so now you can use this relation directly like $userModel->category->name

so now in list you can use below code

{% for user in records %}
    Email : {{ user.email }}
    Category : {{ user.category.name }}
{% endfor %}

if any doubt please comment.

4
On

It is very easy with OctoberCMS relationships. I think you have defined the relationship in your User Model, if not defined it first like below,

    public $belongsTo = [
        'catgeory' => 'YourPluginName\YourAuthorName\Models\Category'
    ];

In place of YourPluginName & YourAuthorName, please define your author and plugin name.

After defining the relationship, you can retrieve user's category by $user->category

e.g. Suppose you have the first User then you can retrieve category by,

$user = User::first();
$category = $user->category;

//and now you can get the category name and all fields by $category,
//$category->title;
//$catgory->name; 

And if you are using twig in the page, and you are showing users with {{ user.name}}(field may be different) then you have to just use {{ user.category.name}} (field may be different) and you can show category too.

I hope you will get categories with users. If you find any difficulty please comment.