मेरे पास 2 मॉडल order और city हैं और प्रत्येक order में एक city है, अब मैं उपयोगकर्ता को यह दिखाना चाहता हूं कि उसके पास प्रत्येक शहर में कितने ऑर्डर हैं। और उदाहरण के लिए परिणाम नीचे की तरह कुछ होगा:

Illuminate\Support\Collection {#2220 ▼
  #items: array:17 [▼
    "new-york" => 80
    "city-number2" => 20
    "city-number3" => 10
    "city-number4" => 5
  ]
}

मैंने अब तक जो कोशिश की है, वह नीचे दिए गए क्रम में लार्वा withcount के साथ काम करना है:

        $orders = Order::withCount('orders')->where('shop_id', $shop->id)->get();

लेकिन इसके साथ कोई भाग्य नहीं है क्योंकि यह सभी शहरों की गिनती देता है प्रत्येक शहर को अलग-अलग नहीं। अग्रिम में धन्यवाद

0
Farshad 11 जुलाई 2021, 12:06

3 जवाब

सबसे बढ़िया उत्तर

आप इस क्वेरी को दूसरी दिशा से आसानी से कर सकते हैं:

$cities = City::withCount(['orders' => fn ($q) => $q->where('shop_id', $shop->id)])->get();

foreach ($cities as $city) {
    echo "{$city->name}: {$city->orders_count}";
}

यदि आपको प्रतिबंधित करने की आवश्यकता है कि कौन से शहर सूचीबद्ध हैं, तो आप जरूरत पड़ने पर इसे और बाधित कर सकते हैं।

1
lagbox 11 जुलाई 2021, 12:24

यह समस्या डीबीएमएस में एक से कई रिश्तों पर आधारित है, लार्वा में एक इनबिल्ड विकल्प है जो वाक्पटु के साथ आता है (एक शहर में कई आदेश हैं और एक आदेश एक शहर से संबंधित है) सबसे पहले, आपको शहरों के मॉडल और आदेश को लागू करने की आवश्यकता है शहरों के अंदर का मॉडल मॉडल इस तरह से एक फ़ंक्शन को परिभाषित करता है

 public function orders()
    {
        return $this->belongsTo(Order::class, 'city_id');
    }

और क्रम में मॉडल इस तरह के एक समारोह को परिभाषित करता है

  public function city()
    {
        return $this->hasMany(City::class, 'order_id');
    }

फिर नियंत्रक में यह पता लगाने के लिए कि प्रत्येक शहर में कितने आदेश इस तरह की क्वेरी का उपयोग लार्वा वाक्पटु के साथ करते हैं

$cities= City::withCount(['orders' => fn ($q) => $q->where('shop_id', $shop->id)])->get();
foreach ($cities as $city) {
    echo $city->orders_count;
}

withCount विधि जो परिणामी मॉडलों पर एक {relation}_count विशेषता रखेगी:

1
Takesha Kaluarachchi 12 जुलाई 2021, 03:34

नियंत्रक यह पता लगाने के लिए कि प्रत्येक शहर में कितने ऑर्डर लार्वा वाक्पटु के साथ इस तरह की क्वेरी का उपयोग करते हैं।

$orders = Order::with('cities')
    ->select('city_id',\DB::raw('count(*) as city'))
    ->groupby('city_id')
    ->get();
0
Ezatullah Tabish 11 जुलाई 2021, 09:40