यह बहुत ही रोचक प्रश्न है।
0 =1 हमेशा असत्य रहेगा, इसलिए आपकी क्वेरी शून्य पंक्तियाँ लौटाएगी। लेकिन ऐसा क्यों है?
क्योंकि सेट करके
->whereIn('size', $size)
लारवेल मानता है कि आप हमेशा चाहते हैं कि लौटाई गई पंक्तियाँ पास की गई सरणी में से किसी एक आकार के साथ हों। यदि आप सरणी में कोई मान पास नहीं करते हैं, तो Laravel ऐसा नहीं कर सकता where size IN ()
क्योंकि यह सिंटैक्स त्रुटि होगी (आप मूल रूप से कहते हैं कि मुझे इस आकार से मेल खाने वाली सभी पंक्तियां दें, लेकिन आप आकार पास नहीं करते हैं)। तो अगर सरणी खाली है तो यह सिर्फ 0 = 1
puts डालता है ।
लारवेल को यह बताने के लिए कि यदि कोई आकार पारित नहीं हुआ है, तो आकार के लिए शर्त नहीं जोड़ने के लिए बस उससे पहले एक साधारण जांच करें।
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
बीटीडब्ल्यू यह व्यवहार एक हॉटफिक्स
है . लैरावेल के पिछले संस्करणों में, यदि आप खाली सरणी पास करते हैं तो आपके पास सिंटैक्स त्रुटि के लिए अपवाद फेंक दिया गया था। अब इसे केवल 1 = 0
. सेट करके नियंत्रित किया जाता है