मेरे पास एक अनुरोध है जिसमें अगला डेटा शामिल है

{
  "path": "some path",
  "site_link": "http://example.com"  
  "features": [ ... ] //array of strings
}

मैं अपनी दो टेबल site और site features को अपडेट करना चाहता हूं।

site तालिका में | id | path | site_link | है।

और site features ये | id | feature | site_id | मुझे "सुविधाओं" की सटीक मात्रा नहीं पता है, हालांकि मुझे अनुरोध के बाद उन्हें अपडेट करने की आवश्यकता है।

क्या उन्हें हटाने के लिए सिवाय अपडेट करने और फिर एक बार बनाने का कोई तरीका है। (कुछ विशेषताओं को बदला जा सकता है, कुछ को हटाया और जोड़ा जा सकता है)।

अभी के लिए मेरे पास सुविधाओं को अद्यतन करने के लिए कोई कोड नहीं है। केवल यह

public function update(Request $request, Site $site)
    {
        $site->update([
            "path" => $request->path,
            "site_link" => $request->link
        ]);

        return response()->json($site, 200);
    }
0
Sergey 26 अगस्त 2018, 21:45
क्या आप प्रत्येक पंक्ति में सुविधाओं को स्टोर कर रहे हैं? या सिर्फ उन्हें एक पंक्ति में संग्रहित करना?
 – 
Teoman Tıngır
26 अगस्त 2018, 22:20
बेशक प्रत्येक पंक्ति में। अन्यथा मैं यह तालिका नहीं बनाऊंगा
 – 
Sergey
27 अगस्त 2018, 07:11

2 जवाब

ठीक है, आपकी स्थिति में आप अपनी site_features पंक्तियों को कुछ इस तरह से अपडेट नहीं कर सकते। क्योंकि आपको अपनी site_features तालिका में दूसरे पहचानकर्ता की आवश्यकता है। क्वेरी के नीचे केवल पहले कॉलम को बार-बार अपडेट किया जाता है। तो, इन सुविधाओं को सहेजने का एकमात्र तरीका create नई पंक्तियां बनाएं विधि के साथ।

यदि आप विशिष्ट site_features कॉलम को अपडेट करना चाहते हैं, तो आपको उन सुविधाओं की आईडी नियंत्रक को पास करनी होगी

public function update(Request $request, Site $site)
    {
       // first you need to select a row before updating it
        $site = $site->where("site_link",$request->site_link)->first(); 
        $site->update([
            "path" => $request->path,
           ]);

        foreach($request->features as $feature){
            SiteFeature::where("id",$feature->id)
             ->update([
                "feature" => $feature->content
             ]);
          }

        return response()->json($site, 200);
    }

यदि आपके पास अभी तक id पैरामीटर नहीं है, यदि ये नई सुविधाएँ हैं तो आपको इनके बारे में नए रिकॉर्ड बनाने होंगे

public function update(Request $request, Site $site)
    {
        $site = $site->where("site_link",$request->site_link)->first(); 
        $site->update([
            "path" => $request->path,
           ]);

        foreach($request->features as $feature){
            SiteFeature::create([
                "feature" => $feature
             ]);
          }

        return response()->json($site, 200);
    }

और, इसका तीसरा तरीका है। यदि आपकी सुविधाएँ सीमित हैं। उदाहरण के लिए, इन वेबसाइटों के बारे में केवल 80 विशेषताएं हैं। कुछ वेबसाइटों में कुछ विशेषताएं होती हैं और अन्य में नहीं.. तब आप many to many संबंध का उपयोग करना चाह सकते हैं। सुविधाएँ तालिका बनाएँ और सभी सुविधाएँ जोड़ें, और सुविधाओं और साइटों के बीच संबंध के लिए अनेक से अनेक बनाएँ। उसके बाद, आपको केवल इन सुविधाओं को सिंक करना होगा। इसे इस्तेमाल करना बहुत आसान है। और तब भी जब आपको किसी एक फीचर के बारे में कुछ बदलाव करने हों। आपके पास बड़े पैमाने पर परिवर्तन नहीं हैं। बस इस फीचर को फीचर टेबल पर बदलें, फिर यह सभी वेबसाइटों को प्रभावित करता है।

मुझे आशा है कि आप मुझे समझ गए होंगे, क्योंकि मेरी अंग्रेजी इतनी भयानक है :)

0
Teoman Tıngır 27 अगस्त 2018, 10:00
सबसे पहले, मेरे पास SiteFeature मॉडल है। दूसरे, वे जितनी चाहें उतनी पंक्तियों में फैले हुए हैं। प्रति पंक्ति केवल एक विशेषता
 – 
Sergey
27 अगस्त 2018, 07:14

सबसे पहले उम्मीद है कि आपने साइट-फीचर्स टेबल के लिए एक मॉडल बना लिया है। यह काफी आसान है। इसके बाद अब

$updates =  SiteFeatures :: where ('feature',$feature)->where('site_id',$siteID) ->get();

अद्यतन करने के लिए:-

$updates->feature = $newFeature;
$updates->save();

हटाने के लिए:-

$updates->delete();

नई सुविधा जोड़ने के लिए आपको इसके बजाय पहले कथन की आवश्यकता नहीं है

$newFeature = new SiteFeatures();
$newFeature->feature = 'the new feature';
$newFeature->site_id = the_site_id;
$newFeature->save();
0
akshay kishore 27 अगस्त 2018, 10:40