Eğer ilişkisel veritabanı kullanıyorsanız (MySql veya MsSql gibi), tablo yapınız hatalı. Örnek üzerinden gidecek olursak il-ilçe-mahalle için ayrı ayrı tablolar oluşturmak daha doğru bir yol olur.
Sorduğunuz soru üzerinden gidersek, collection kullanarak bunu yapabilirsiniz. Yalnız veri setiniz küçük ise ve çok büyüme ihtimali yoksa collection kullanmanızı tavsiye ederim. Çünkü aşağıdaki örnek tüm verilerin $data isimli değişkende tutulduğu senaryoya göre gidiyor. Veriler büyüdükçe, bu kullanım performans açısından verimsiz olur.
$data = collect([
[
"id" => 1,
"name" => "Adana",
"parent_id" => null
],
[
"id" => 2,
"name" => "Adıyaman",
"parent_id" => null
],
[
"id" => 3,
"name" => "Ceyhan",
"parent_id" => 1
],
[
"id" => 4,
"name" => "Çukurova",
"parent_id" => 1
],
]);
$province = $data->where("parent_id", null);
$district = $data->whereIn("parent_id", $province->pluck("id"));
//return $province; // İller
return $district; // İlçeler