2013-03-25 11 views
18

मुझे डेटाबेस में सभी पंक्तियों को अपडेट करने की आवश्यकता है ताकि में एक विशेष फ़ील्ड उन सभी उनमें से एक मान के बराबर हो। यहां एक उदाहरण दिया गया है।लार्वेल के एलोक्वेंट/फ्लुएंट के साथ प्रत्येक पंक्ति को उसी मान पर कैसे सेट करें?

id | data | confirmed 
1  | someData |  0 
2  | someData |  1 
3  | someData |  0 

मैं एक प्रश्न है कि करने के लिए 1.

हर पंक्ति के इस बात की पुष्टि के लिए फ़ील्ड सेट करना चाहते मैं इसे इस तरह से कर सकता है::

मान लीजिए कि मेरी डेटाबेस तालिका है, इसलिए पसंद आता है

$rows = MyModel::where('confirmed', '=', '0')->get(); 
foreach($rows as $row) { 
    $row->confirmed = 0; 
    $row->save(); 
} 

लेकिन ऐसा लगता है कि एक बेहतर तरीका होगा? एक ही क्वेरी जो केवल "हर पंक्ति की 'पुष्टि' फ़ील्ड को 1 पर सेट करेगी।"

क्या ऐसी क्वेरी लैरवेल के एलोक्वेंट/फ्लुएंट में मौजूद है?

उत्तर

37

अच्छा, एक आसान उत्तर: नहीं, आप वाक्प्रचार के साथ नहीं कर सकते हैं। एक मॉडल डेटाबेस में 1 पंक्ति का प्रतिनिधित्व करता है, अगर यह लागू किया जाता है तो यह समझ में नहीं आता है।

$affected = DB::table('table')->update(array('confirmed' => 1)); 

या और भी बेहतर

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1)); 
11

आप elquent साथ ऐसा कर सकते (laravel 4)::

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1]) 
23

हालांकि, वहाँ धाराप्रवाह के साथ ऐसा करने का एक तरीका है

बस इस धागे को चालू रखने के लिए, आप सीधे एक एलोक्वेंट मॉडल के खिलाफ सभी पंक्तियों को अपडेट कर सकते हैं:

Model::query()->update(['confirmed' => 1]); 
+0

यही वह है जिसे मैं ढूंढ रहा हूं! धन्यवाद! –

संबंधित मुद्दे