2016-04-27 31 views
7

में अद्यतन क्या बचाने() और अद्यतन() Laravel में विधि के बीच अंतर है बनाम सहेजें।laravel

मैंने अद्यतन क्वेरी के मामले में save() विधि का उपयोग किया है लेकिन कुछ मामलों में यह अद्यतन के रूप में कार्य करता है और कुछ मामलों में यह सम्मिलित क्वेरी फ़ंक्शन के रूप में कार्य करता है। कृपया मुझे बताएं कि उनके बीच वास्तव में क्या अंतर है।

उत्तर

17

ये विधियां आपको डेटा को डेटाबेस में सहेजने की अनुमति देती हैं। INSERT रूप

save() विधि perfroms जब आप एक नया मॉडल है जो वर्तमान में अपने डेटाबेस तालिका में प्रस्तुत नहीं किया जाता है बनाने के लिए:

$flight = new Flight; 

$flight->name = $request->name; 

$flight->save(); // it will INSERT a new record 

इसके अलावा यह एक UPDATE की तरह काम कर सकते हैं, जब आपका मॉडल पहले से ही डेटाबेस में मौजूद है । तो तुम, मॉडल मिल सकता है कुछ गुण संशोधित और फिर save() यह है, वास्तव में प्रदर्शन डाटाबेस के UDPATE:

App\Flight::where('active', 1) 
      ->where('destination', 'San Diego') 
      ->update(['delayed' => 1]); // this will also update the record 

तो तुम:

$flight = App\Flight::find(1); 

$flight->name = 'New Flight Name'; 

$flight->save(); //this will UPDATE the record with id=1 

एक update() विधि आप और अधिक सुविधाजनक तरीके से अपने मॉडल को अद्यतन करने की अनुमति देता है किसी भी चर के लिए एक पुनर्प्राप्त मॉडल असाइन नहीं करना चाहिए। अद्यतन गुण तर्क के रूप में पारित कर रहे हैं।

उदाहरण और Laravel's docs में अधिक जानकारी।

4

क्या @ginopane अंतर के बारे में बताया में केवल एक बात अनकहा छोड़ दिया नहीं है और यह कि यदि आप एक query builder result पर अद्यतन विधि का उपयोग करें तो laravel पर ध्यान नहीं देगा अपने मॉडल के $fillable या $guard सरणी है। यह विशेष रूप से महत्वपूर्ण है कि आप एक तर्क के रूप Input::all() उपयोग करने के लिए अद्यतन करने के लिए चाहते हैं:

Post::where('id', $id)->update(Input::all()); 

तो इस मामले में आप अपने डेटाबेस में App\Flight::where('active', 1)->update(Input::all()); सब कुछ अपडेट किया जाएगा का उपयोग करता है, तो भले ही आप इसे $fillable में डाल दिया। तो Eloquent instance पर save और update विधियों का उपयोग करना सुनिश्चित करें और प्रश्न निर्माता एक नहीं।

// User model 
protected $fillable = ['email', 'name']; 


// controller 
public function update($id) 
{ 
    $user = User::findOrFail($id); 

    // validate the input here, use Request to do the job or whatever you like 

    $user->update(Input::all()); 

    return view('some_view')->with('notice', 'user updated'); 
} 

अब, कोई बात नहीं क्या साथ फार्म यहां पारित किया जा रहा है, केवल name और email: उपयोगकर्ता अपने databse सारणी के कोष्ठकों या अद्यतन कि आप सम्मिलित नहीं करना चाहती प्रस्तुत भले ही निम्नलिखित कोड ठीक हो जाएगा अपडेट किया जाएगा।

आशा है कि यह पूरा @ginopane उत्तर