2014-09-26 106 views
9

我有以下代碼:雄辯同步和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); 

在上面的代碼中創建條目($entry->save()在這裏就足以明白,前面的代碼並不重要),然後保存到哪個類別此條目屬於(使用數據透視表),並執行相同的標籤(但標籤如果標籤不存在,我創建一個)。

但是在兩個數據透視表created_at字段都是在插入數據後默認(0000-00-00 00:00:00)(可能與updated_at相同,但我沒有測試過)。

我是否需要以某種方式自動激活備案時間戳或需要我自己手動填寫他們(但可能會意味着更多的編碼和不使用sync)?

+3

您正在提供帶有關聯數組的「同步」,同時它接受要同步的「ids」數組。對於數據透視表中的時間戳 - 您需要在關係定義中使用'withTimestamps()',否則將不會設置/更新。 – 2014-09-26 12:37:22

+0

@JarekTkaczyk感謝'withTimestamps()'解決了這個問題。但是使用'sync'你可以添加額外的數據透視數據 - 查看http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables和「同步時添加數據透視數據」部分# – 2014-09-26 12:47:29

+0

是的,你可以做如果它是透視數據。我以爲你經過那裏的一個關係鍵。 – 2014-09-26 12:48:22

回答

25

爲了處理樞紐的時間戳,當你同步/附加belongsToMany關係,你需要包括withTimestamp()的關係定義:

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

然後每sync/attach/updateExistingPivot將設置/更新的時間戳您數據透視表。