"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > लारवेल मॉडल पर उत्सुक रिश्तों को सीमित करें

लारवेल मॉडल पर उत्सुक रिश्तों को सीमित करें

2024-11-07 को प्रकाशित
ब्राउज़ करें:278

Limit Eager Loaded Relationships on Laravel Models

परिचय

कभी-कभी जब आप लारवेल मॉडल पर संबंध लोड करने के लिए उत्सुक होते हैं, तो आप वापस आने वाले संबंधित मॉडलों की संख्या को सीमित करना चाह सकते हैं।

उदाहरण के लिए, एक ब्लॉगिंग प्लेटफ़ॉर्म पर, आप प्रत्येक लेखक को उनकी तीन पोस्ट के साथ सिस्टम में लोड करना चाह सकते हैं।

लारवेल के पुराने संस्करणों में, उत्सुक रिश्तों को सीमित करना थोड़ा मुश्किल काम था। मैं वास्तव में ऐसा करने का कोई शानदार तरीका कभी नहीं खोज सका जो सही लगे। इसलिए मैंने आमतौर पर जोनास स्टौडेनमेयर का (@staudenmeir) स्टौडेनमेयर/एलोक्वेंट-ईगर-लिमिट पैकेज स्थापित किया जो इस कार्यक्षमता को जोड़ता है।

हालाँकि, इस वर्ष की शुरुआत में, उस पैकेज के पीछे की मुख्य कार्यक्षमता को लारवेल फ्रेमवर्क में ही विलय कर दिया गया था। तो इसका मतलब है कि लारवेल 11 में, हम किसी भी अतिरिक्त पैकेज को स्थापित करने की आवश्यकता के बिना उत्सुक लोडेड रिश्तों को सीमित कर सकते हैं।

आइए एक उदाहरण देखें।

लारवेल में उत्सुक संबंधों को सीमित करना

मान लें कि हमारे पास एक ब्लॉगिंग प्लेटफ़ॉर्म है और हम प्रत्येक लेखक को उनकी तीन पोस्ट के साथ सिस्टम में लोड करना चाहते हैं।

हम उत्सुक लोडिंग क्वेरी में सीमा विधि का उपयोग करके इसे प्राप्त कर सकते हैं:

use App\Models\Post;
use App\Models\Author;
use Illuminate\Contracts\Database\Eloquent\Builder;

$authors = Author::query()
    ->with([
        'posts' => fn (Builder $query): Builder => $query->limit(3),
    ])
    ->get();

जैसा कि हम ऊपर दिए गए कोड उदाहरण में देख सकते हैं, हमने परिभाषित किया है कि हम App\Models\Author मॉडल पर पोस्ट संबंध को उत्सुकता से लोड करना चाहते हैं। उत्सुक लोडिंग क्वेरी में, हमने यह निर्दिष्ट करने के लिए सीमा विधि का उपयोग किया है कि हम केवल तीन पोस्ट लोड करना चाहते हैं।

अंतर्निहित SQL क्वेरीज़

रुचि रखने वाले किसी भी व्यक्ति के लिए, उपरोक्त क्वेरी दो SQL क्वेरी उत्पन्न करेगी।

पहली क्वेरी डेटाबेस से लेखकों को लाती है:

SELECT * FROM `authors`

दूसरी क्वेरी प्रत्येक लेखक के लिए तीन पोस्ट लाती है (मान लें कि हमारे पास सिस्टम में 5 लेखक हैं):

SELECT *
FROM
    (
        SELECT
            *,
            row_number() OVER (PARTITION BY `posts`.`author_id`) AS `laravel_row`
        FROM `posts`
        WHERE `posts`.`author_id` IN (1, 2, 3, 4, 5)
    ) AS `laravel_table`
WHERE `laravel_row` 



अग्रिम पठन

यदि आपको यह पोस्ट पढ़ने में आनंद आया, तो आपको मेरी 220 पेज की ईबुक "बैटल रेडी लारवेल" देखने में रुचि हो सकती है, जो समान विषयों को अधिक गहराई से कवर करती है।

या, आप मेरी अन्य 440 पेज की ईबुक "लारवेल में एपीआई का उपभोग करना" देखना चाहेंगे जो आपको सिखाती है कि अन्य सेवाओं से एपीआई का उपभोग करने के लिए लारवेल का उपयोग कैसे करें।

यदि आप मेरे द्वारा हर बार नई पोस्ट प्रकाशित करने पर अपडेट होने में रुचि रखते हैं, तो बेझिझक मेरे न्यूज़लेटर के लिए साइन अप करें।

शानदार चीजें बनाते रहें! ?

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/ashallendesign/limit-eager-loaded-relationships-on-laravel-models-4c43?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3