ho il seguente codice:Eloquente sincronizzazione e 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);
Nel codice di cui sopra genero di entrata ($entry->save()
è qui quanto basta per capire, il codice in precedenza non è importante), quindi salvare in quali categorie questa voce appartiene a (usando la tabella pivot) e fa lo stesso con i tag (ma per i tag se il tag non esiste ne creo uno). predefinito
Tuttavia in entrambe le tabelle pivot created_at
campo viene lasciato (0000-00-00 00:00:00
) dopo l'inserimento dati (probabilmente lo stesso sarà con updated_at
ma non ho testato).
In qualche modo ho bisogno di attivare automaticamente la data/ora di archiviazione o devo riempirli manualmente per conto mio (ma probabilmente significherà molto più codifica e non usare sync
)?
Si sta fornendo 'sync' con array associativo, mentre accetta un array di' ids' da sincronizzare. E per i timestamp sulla tabella pivot - devi usare 'withTimestamps()' sulla definizione della relazione, altrimenti quelli non saranno impostati/aggiornati. –
@JarekTkaczyk Grazie 'withTimestamps()' ha risolto il problema. Ma usando 'sync' puoi aggiungere ulteriori dati di pivot - guarda http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables e sezione' Aggiunta di dati di pivot durante la sincronizzazione' –
Sì, puoi farlo questo, se si tratta di dati pivot. Pensavo che tu avessi passato lì una delle chiavi della relazione. –