2014-08-31 36 views
13

का उपयोग कर एक संग्रह को अद्यतन करने के लिए मैं (प्रत्येक Device कई commands है) Device और Command मॉडलों के बीच कई रिश्ते के लिए एक है। अब मैं save() विधि का उपयोग कर कमांड का संग्रह अपडेट करना चाहता हूं। तो, मैं निम्नलिखित कोड का इस्तेमाल किया:सुवक्ता Laravel

$device = Device::find(1); 
$commands = $device->commands()->whereStatus("pending")->get(); 

$commands->status = "sent"; 
$commands->save(); 

लेकिन मैं Call to undefined method Illuminate\Database\Eloquent\Collection::save() की एक त्रुटि संदेश के साथ एक FatalErrorException अपवाद मिला है।

दूसरे शब्दों में, मैं Eloquent में निम्न में से एक बराबर MySQL क्वेरी रहा हूँ:

UPDATE commands SET status = 'sent' WHERE status = 'pending'; 

Laravel 4.2

उत्तर

19

आप update विधि की कोशिश कर सकते:

$collection = $device->commands()->whereStatus("pending"); 
$data = $collection->get(); 
$collection->update(array("status" => "sent")); 
+0

और अपडेट करने के बाद मैं संग्रह कैसे प्राप्त कर सकता हूं? –

+1

उस रेखा को एक चर के लिए असाइन करें - इसे करना चाहिए। – BenjaminRH

+0

लेकिन यह प्रभावित रिकॉर्ड की संख्या देता है ??? –

5

का उपयोग कर $commands के बाद से एक संग्रह है, $commands->status का मूल्य बदलते नहीं आपके द्वारा इच्छित प्रभाव का प्रभाव है (संग्रह में प्रत्येक आइटम के लिए 0 भेजे गए 'status के मान को सेट करना)।

इसके बजाय, स्वतंत्र रूप से संग्रह में प्रत्येक आइटम पर कार्रवाई:

foreach ($commands as $command) 
{ 
    $command->status = 'sent'; 
    $command->save(); 
} 

तुम भी क्वेरी बिल्डर के माध्यम से डेटाबेस में आइटम अपडेट कर सकते हैं:

DB::table('your_table')->where('status', 'pending')->update(array('status' => 'pending')); 
संबंधित मुद्दे