/ / इस लिस्टिंग लार्वेल को रिश्ते के साथ करने का सबसे अच्छा तरीका है - लार्वेल, एलोकेंट, रिलेशनशिप

रिश्ते के साथ इस लिस्टिंग लार्वेल को करने का सबसे अच्छा तरीका है - लार्वेल, एलोकेंट, संबंध

इस सूची को करने का सबसे अच्छा तरीका क्या है?

मैं इसे उस तरह से "बदसूरत" नहीं करना चाहूंगा।

/**
* Get user indicateds
* @return array|null
*/
static public function indicateds()
{
$users = ModelUser::all();
foreach( $users as $user ) {
if( $user->financial->status_payment ) {
$newArray[] = $user;
}
}
return (isset($newArray) ? $newArray : null);
}

धन्यवाद

उत्तर:

उत्तर № 1 के लिए 1

आप संग्रह का उपयोग कर सकते हैं filter तरीका:

return ModelUser::with("financial")
->get()
->filter(function($user) {
return $user->financial->status_payment;
});

मुझे लगता है आप को परिभाषित कर रहा हूँ वित्तीय संबंध और आपको इसे लोड करना चाहिए क्योंकि मैंने प्रदर्शन में सुधार किया।


उत्तर № 2 के लिए -1

रिश्तों के लाभों में से एक यह है कि आप उन्हें अपने प्रश्नों को संशोधित करने के लिए उपयोग कर सकते हैं, साथ ही साथ। इसलिए, सभी उपयोगकर्ताओं को एक में लाने के बजाय Collection, और फिर फ़िल्टरिंग Collection, आप रिश्ते को संशोधित करने के लिए उपयोग कर सकते हैंक्वेरी ताकि आप केवल पहली जगह में वांछित रिकॉर्ड प्राप्त कर सकें। यह डेटाबेस से लौटाए गए रिकॉर्डों की संख्या को कम करेगा, साथ ही मॉडल के उदाहरणों की संख्या जो पैदा करेगा। इससे आपका समय और मेमोरी बचेगी।

$users = ModelUser::with("financial")
->whereHas("financial", function($q) {
// $q is the query for the financial relationship;
return $q->where("status_payment", true);
}
->get();

The with() की आवश्यकता नहीं है, लेकिन अगर आप "ll तक पहुँचने financial लौटे उपयोगकर्ताओं पर संबंध, यह एक अच्छा विचार है इसे लोड उत्सुक है ।

The whereHas() है जहां जादू होता है । यह क्वेरी को संशोधित करता है ताकि यह केवल उन उपयोगकर्ताओं को वापस कर देगा जिनके पास संबंधित financial रिकॉर्ड जो दूसरे पैरामीटर में उपयोग किए गए क्लोजर द्वारा जोड़ी गई शर्तों से मेल खाता है ।

आप इसके बारे में और अधिक पढ़ सकते हैं यहां प्रलेखन.