Możesz użyć wywołania zwrotnego, aby stworzyć bardziej skomplikowane zapytanie sprzężenia.
->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})
Oto link do dokumentu laravel - https://laravel.com/docs/5.4/queries# łączy Sekcja „Zaawansowane klauzule łączenia”.
UPD::Jak wspomniano w komentarzu, nie jest dobrym pomysłem posiadanie ciągu znaków dla tego typu danych. Wyszukiwanie przyczyn przez równość powinno być znacznie prostsze niż sprawdzanie ciągu. Nawet jeśli ilość danych nie powinna mieć dużej różnicy, nigdy nie wiesz, co stanie się z Twoją aplikacją w przyszłości.
Ale jeśli nadal chcesz to zrobić, myślę, że możesz spróbować w ten sposób
->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})
Dołącz, który sprawdzi istnienie identyfikatora w cat_id.