Bạn có thể sử dụng callback để tạo truy vấn nối phức tạp hơn.
->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})
Đây là liên kết trên laravel doc - https://laravel.com/docs/5.4/queries# tham gia Phần "Điều khoản tham gia nâng cao".
UPD ::Như đã đề cập trong bình luận, không phải là ý kiến hay nếu có chuỗi cho các loại dữ liệu như vậy. Tìm kiếm nguyên nhân theo đẳng thức sẽ đơn giản hơn nhiều so với kiểm tra chuỗi. Ngay cả khi lượng dữ liệu của bạn không có sự khác biệt lớn, bạn sẽ không bao giờ biết điều gì sẽ xảy ra với ứng dụng của mình trong tương lai.
Nhưng nếu bạn vẫn muốn làm điều đó, tôi nghĩ bạn có thể thử như thế này
->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})
Tham gia đó sẽ kiểm tra sự tồn tại của id trong cat_id.