Anda dapat menggunakan panggilan balik untuk membuat kueri bergabung yang lebih rumit.
->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})
Berikut ini tautan di laravel doc - https://laravel.com/docs/5.4/queries# bergabung Bagian "Klausul Gabung Lanjutan".
UPD::Seperti yang disebutkan dalam komentar, bukanlah ide yang baik untuk memiliki string untuk jenis data seperti itu. Pencarian penyebab dengan kesetaraan harus jauh lebih sederhana daripada pemeriksaan string. Bahkan jika jumlah data Anda seharusnya tidak memiliki perbedaan besar, Anda tidak pernah tahu apa yang akan terjadi dengan aplikasi Anda di masa depan.
Tetapi jika Anda masih ingin melakukannya, saya pikir Anda dapat mencoba seperti ini
->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})
Join yang akan mengecek keberadaan id di cat_id.