I have 3 tables, users, user_cat, and cat, table structure and relationship are setup as follows.<br><br>User.pm<br><br>
__PACKAGE__-&gt;add_columns(<br>  &quot;id&quot;,<br>  { data_type =&gt; &quot;integer&quot;, is_nullable =&gt; 0 },<br>  &quot;username&quot;,<br>  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 1 },<br>  &quot;password&quot;,<br>


  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 1 },<br>  &quot;email_address&quot;,<br>  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 1 },<br>  &quot;first_name&quot;,<br>  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 1 },<br>


  &quot;last_name&quot;,<br>  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 1 },<br>  &quot;active&quot;,<br>  { data_type =&gt; &quot;integer&quot;, is_nullable =&gt; 1 },<br>);<br>__PACKAGE__-&gt;set_primary_key(&quot;<div id=":u0">

id&quot;);<br>
<br>__PACKAGE__-&gt;has_many(&quot;usercats&quot;, &quot;Example::Schema::Result::UserCat&quot;,{ &quot;foreign.user_id&quot; =&gt; &quot;<a href="http://self.id/" target="_blank">self.id</a>&quot; },);<br>__PACKAGE__-&gt;many_to_many(cats =&gt; &#39;usercats&#39;, &#39;cat&#39;);<br>


<br>UserCat.pm<br><br>__PACKAGE__-&gt;add_columns(<br>  &quot;user_id&quot;,<br>  { data_type =&gt; &quot;integer&quot;, is_nullable =&gt; 0 },<br>  &quot;cat_id&quot;,<br>  { data_type =&gt; &quot;integer&quot;, default_value =&gt; 0, is_nullable =&gt; 0 },<br>


);<br>__PACKAGE__-&gt;set_primary_key(&quot;user_id&quot;, &quot;cat_id&quot;);<br><br>__PACKAGE__-&gt;belongs_to(&quot;user&quot;, &quot;Example::Schema::Result::User&quot;, { id =&gt; &quot;user_id&quot; },{ join_type =&gt; &quot;LEFT&quot; },);<br>


__PACKAGE__-&gt;belongs_to(&quot;cat&quot;, &quot;Example::Schema::Result::Cat&quot;, { id =&gt; &quot;cat_id&quot; },{ join_type =&gt; &quot;LEFT&quot; },);<br><br>Cat.pm<br><br>__PACKAGE__-&gt;add_columns(<br>  &quot;id&quot;,<br>


  { data_type =&gt; &quot;integer&quot;, is_nullable =&gt; 0 },<br>  &quot;cat_name&quot;,<br>  { data_type =&gt; &quot;text&quot;, is_nullable =&gt; 0 },<br> &quot;parent_id&quot;,<br>  { data_type =&gt; &quot;integer&quot;, is_nullable =&gt; 0 },<br>

);<br>__PACKAGE__-&gt;set_primary_key(&quot;id&quot;,&quot;parent_id&quot;);<br><br>__PACKAGE__-&gt;has_many(&quot;usercat&quot;,&quot;Example::Schema::Result::UserCat&quot;,{ &quot;foreign.cat_id&quot; =&gt; &quot;<a href="http://self.id/" target="_blank">self.id</a>&quot; },);<br>

__PACKAGE__&gt;many_to_many(&quot;allcat&quot;, &quot;usercat&#39;, &quot;cat&quot;);<br>
<br>I am able to retrieve all users in any particular category using &quot;allcat&quot; many_to_many relationship.<br><br>In cat table I have both category and sub category, if a row have parent_id &gt; 0 then it is sub category.<br>

<br>How can I get all users belong to one category and its sub categories? <br><br>Thanks in advance.<br><br></div>