2014-09-26 2 views
9

나는 다음과 같은 코드가 updated_at : ($entry->save()은 충분히 이해 여기에, 이전 코드는 중요하지 않다)웅변 동기화 및 created_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을 사용하지 않을 수도 있습니다). 당신이, 당신이 관계 정의에 withTimestamp()을 포함해야 belongsToMany 관계를 부착 동기화/때 피벗 타임 스탬프를 처리하기 위해

+3

연관 배열을 사용하여'sync'를 제공하는 반면 동기화 할'ids' 배열을 허용합니다. 그리고 피벗 테이블의 타임 스탬프의 경우 - 관계 정의에'withTimestamps()'를 사용해야합니다. 그렇지 않으면 설정/업데이트되지 않습니다. –

+0

@JarekTkaczyk 감사의 말로'withTimestamps()'가이 문제를 해결했습니다. 그러나 동기화를 사용하면 추가 피벗 데이터를 추가 할 수 있습니다. http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables 및'동기화 할 때 피벗 데이터 추가 '절을 참조하십시오. –

+0

예, 할 수 있습니다. 그게 피벗 데이터라면. 나는 관계 열쇠 중 하나를 통과했다고 생각했습니다. –

답변

25

:

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

그런 다음 모든 sync/attach/updateExistingPivot가에있는 타임 스탬프를 업데이트 설정 /됩니다 피벗 테이블.