laravel लार्वेल में गैर-कुंजी कॉलम फ़ील्ड के लिए अलग-अलग मान कैसे प्राप्त करें?




eloquent builder (5)

यह काफी आसान हो सकता है लेकिन यह नहीं पता कि कैसे करें।

मेरे पास एक सारणी है जो किसी विशेष गैर-कुंजी कॉलम फ़ील्ड के लिए मानों को दोहरा सकती है। मैं क्वेरी बिल्डर या एलोक्वेंट का उपयोग करके एक SQL क्वेरी कैसे लिखूं जो पंक्तियों को उस कॉलम के लिए अलग-अलग मानों के साथ लाएगा?

ध्यान दें कि मैं केवल उस कॉलम को नहीं ला रहा हूं, यह अन्य कॉलम मानों के संयोजन के साथ है, इसलिए distinct() वास्तव में काम नहीं कर सकता है। तो सवाल यह है कि मूल रूप से उस कॉलम को निर्दिष्ट करने के लिए कैसे किया जा सकता है जिसे मैं किसी क्वेरी में अलग करना चाहता हूं, जो कि distinct() कोई पैरामीटर स्वीकार नहीं करता है?


द्वारा समूहबद्ध करना काम नहीं करेगा यदि डेटाबेस नियम किसी भी चयनित फ़ील्ड को कुल कार्य के बाहर होने की अनुमति नहीं देते हैं। इसके बजाय लार्वेल संग्रह का उपयोग करें।

$users = DB::table('users')
        ->select('id','name', 'email')
        ->get();

foreach($users->unique('name') as $user){
  //....
}

Eloquent में आप इस तरह से पूछ सकते हैं:

$users = User::select('name')->distinct()->get();


आपको groupby उपयोग करना चाहिए। क्वेरी बिल्डर में आप इसे इस तरह से कर सकते हैं:

$users = DB::table('users')
            ->select('id','name', 'email')
            ->groupBy('name')
            ->get();

भाषण में आप इसका उपयोग कर सकते हैं

$users = User::select('name')->groupBy('name')->get()->toArray() ;

समूह वास्तव में अलग-अलग मूल्यों को ला रहा है, वास्तव में समूह द्वारा समान मूल्यों को वर्गीकृत किया जाएगा, ताकि हम उन पर कुल कार्यों का उपयोग कर सकें। लेकिन इस परिदृश्य में हमारे पास कोई कुल कार्य नहीं है, हम केवल उस मूल्य का चयन कर रहे हैं जिसके परिणामस्वरूप अलग-अलग मूल्य होंगे


हालांकि मुझे इसका जवाब देने में देर हो चुकी है, लेकिन इलोक्वेंट का उपयोग करके अलग-अलग रिकॉर्ड प्राप्त करने के लिए एक बेहतर तरीका होगा

$user_names = User::distinct()->get(['name']);