Du kan bruge tilbagekald til at oprette en mere kompliceret forbindelsesforespørgsel.
->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})
Her er link til laravel doc - https://laravel.com/docs/5.4/queries# slutter sig til Sektionen "Avancerede tilmeldingsklausuler".
UPD::Som nævnt i kommentaren er det ikke en god idé at have strenge til sådanne typer data. Fordi søgning efter lighed burde være meget enklere end strengkontrol. Selvom din mængde data ikke skulle have den store forskel, ved du aldrig, hvad der vil ske med din app i fremtiden.
Men hvis du stadig vil gøre det, tror jeg, du kan prøve sådan her
->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})
Deltag, der vil kontrollere eksistensen af id i cat_id.