2014-09-26 14 views
9

मैं निम्नलिखित कोड है: ($entry->save() बस इसे समझने के लिए पर्याप्त यहाँ है, पहले कोड महत्वपूर्ण नहीं है)सुवक्ता सिंक और created_at/updated_at

$entry->save(); 

$categories = []; 

$categories[Input::get('main_category')] = ['main' => 1]; 

for ($i=1; $i<=4 ; ++$i) { 
    $input = Input::get('category_'.$i); 
    if ($input != '') { 
      $categories[$input] = ['main' => 0]; 
    } 
} 



$entry->categories()->sync($categories); 

$inTags = explode(',', trim(Input::get('tags'), ',')); 
$tags = []; 

foreach ($inTags as $tag) { 
    $tag = trim($tag); 
    if ($tag == '') { 
     continue; 
    } 
    $fTag = Tag::firstOrCreate(array('name' => $tag)); 

    $tags[$fTag->id] = ['entry_id' => $entry->id]; 
} 
$entry->tags()->sync($tags); 

ऊपर कोड मैं प्रविष्टि बनाने में, तो जो श्रेणियों के लिए बचाने के लिए यह प्रविष्टि (पिवोट टेबल का उपयोग करके) से संबंधित है और टैग के साथ ऐसा ही करती है (लेकिन टैग के लिए यदि टैग मौजूद नहीं है तो मैं एक बना देता हूं)।

हालांकि डेटा डालने के बाद दोनों पिवट टेबल created_at फ़ील्ड डिफ़ॉल्ट (0000-00-00 00:00:00) छोड़ दिया गया है (शायद यह updated_at के साथ होगा लेकिन मैंने इसका परीक्षण नहीं किया है)।

क्या मुझे किसी भी तरह से स्वचालित रूप से फाइलिंग टाइमस्टैम्प को सक्रिय करने की आवश्यकता है या मुझे अपने आप को मैन्युअल रूप से भरने की आवश्यकता है (लेकिन शायद इसका मतलब अधिक कोडिंग होगा और sync का उपयोग नहीं करेगा)?

+3

आप एसोसिएटिव सरणी के साथ 'सिंक' प्रदान कर रहे हैं, जबकि यह सिंक करने के लिए 'ids' की सरणी स्वीकार करता है। और अपनी पिवोट टेबल पर टाइमस्टैम्प के लिए - आपको संबंध परिभाषा पर 'withTimestamps()' का उपयोग करने की आवश्यकता है, अन्यथा उनको सेट/अपडेट नहीं किया जाएगा। –

+0

@JarekTkaczyk धन्यवाद 'withTimestamps()' इस मुद्दे को हल किया। लेकिन 'सिंक' का उपयोग करके आप अतिरिक्त पिवट डेटा जोड़ सकते हैं - http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables और सेक्शन देखें ' –

+0

सिंक करते समय पिवोट डेटा जोड़ना हाँ, आप कर सकते हैं कि, अगर यह मुख्य डेटा है। मैंने सोचा कि आप वहां रिलेशनशिप कुंजियों में से एक पारित कर चुके हैं। –

उत्तर

25

आदेश धुरी timestamps को संभालने के लिए जब आप सिंक/belongsToMany संबंध देते हैं, तो आप संबंध परिभाषा पर withTimestamp() शामिल करने की ज़रूरत में:

// some model 
public function someRelation() 
{ 
    return $this->belongsToMany('RelatedModel')->withTimestamps(); 
} 

तो हर sync/attach/updateExistingPivot सेट हो जाएगा/के टाइमस्टैम्प अद्यतन अपने पिवट तालिका।

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