Bir kere WHERE IN yerine FIND_IN_SET kullanacaksınız, (1,2,3) ile ("1,2,3") farklı şeylerdir. Ayrıca böyle bir ilişkiyi eloquent kullanarak kurabilir misiniz bilmiyorum (kuramazsınız gibime geliyor). Relationship kullanmadan yapmaya çalışsanız iç içe sorgu kullanmanız gerekecek. Bu da sorgu sayısı = kategori sayısı + 1 demek, yani 10 kategori listeletirseniz 11 sorgu yapacak. Tek sorguda yapmak isteseniz yazıları kategoriler ile birleştirip çekmeniz lazım, sonra php ile foreach if array vs kullanarak kategori ve yazıları istediğiniz gibi listelemek için takla atacaksınız. Mevcut yapıyı bozmayacak şekilde en makul yol:
- Önce tüm yazıları alıp bir diziye aktaracaksınız. Sadece listeleyeceğiniz alanları seçin, id başlık kategori gibi mesela
- Diziye aktarırken kategorileri virgülle ayrılmış karakter ifadeden explode ile diziye getirip ayrı bir alanda tutrasanız filtrelemeniz kolay olur. in_array ile yaparsınız
- Kategorileri normal listelerken o kategoriye ait yazıları da foreach içinde kategorisine göre filtreleyerek listeleteceksiniz.
İşte bunların hepsi yazı kategori ilişkisini ayrı bir tabloda tutmadığınız için. Ayrı bir tabloda tutsaydınız bunları hiç düşünmek zorunda kalmayacaktınız