Можете да използвате обратно извикване, за да създадете по-сложна заявка за присъединяване.
->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})
Ето връзка към laravel doc - https://laravel.com/docs/5.4/queries# се присъединява Раздел „Разширени клаузи за свързване“.
UPD::Както беше споменато в коментара, не е добра идея да има низ за такива типове данни. Тъй като търсенето по равенство трябва да е много по-просто от проверката на низове. Дори ако количеството ви данни не трябва да има голяма разлика, никога не знаете какво ще се случи с приложението ви в бъдеще.
Но ако все пак искате да го направите, мисля, че можете да опитате по този начин
->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})
Присъединете се, което ще провери съществуването на идентификатор в cat_id.