Mam następujący kod:Eloquent sync i 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);
W powyższym kodzie tworzę wpis ($entry->save()
jest tu tyle, aby go zrozumieć, wcześniej kod nie jest ważne), a następnie zapisać do której z kategorii ten wpis należy do (używając tabeli przestawnej) i wykonaj to samo z tagami (ale dla tagów jeśli tag nie istnieje tworzę go).
Jednak w obu tabelach przestawnych created_at
pole jest pozostawione domyślne (0000-00-00 00:00:00
) po wstawieniu danych (prawdopodobnie to samo będzie z updated_at
, ale nie testowałem tego).
Czy muszę w jakiś sposób automatycznie aktywować sygnatury czasowe zgłoszenia, czy też muszę je samodzielnie wypełnić ręcznie (ale prawdopodobnie będzie to oznaczać o wiele więcej kodowania i nie używać sync
)?
Dostarczasz 'sync' z tablicą asocjacyjną, podczas gdy akceptuje ona tablicę' id 'do zsynchronizowania. A dla znaczników czasu w tabeli przestawnej - musisz użyć 'withTimestamps()' w definicji relacji, w przeciwnym razie nie zostaną one ustawione/zaktualizowane. –
@JarekTkaczyk Dzięki 'withTimestamps()' rozwiązano problem. Ale używając 'sync' możesz dodać dodatkowe dane przestawne - zobacz http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables i section' Dodawanie danych przestawnych podczas synchronizacji' –
Tak, możesz zrobić to, jeśli są to dane przestawne. Myślałem, że przekazałeś tam jeden z kluczy do relacji. –