2014-09-26 12 views
9

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)?

+3

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. –

+0

@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' –

+0

Sì, puoi farlo questo, se si tratta di dati pivot. Pensavo che tu avessi passato lì una delle chiavi della relazione. –

risposta

25

Al fine di gestire timestamp perno quando si esegue la sincronizzazione/attach belongsToMany relazione, è necessario includere withTimestamp() sulla definizione relazione:

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

Poi ogni sync/attach/updateExistingPivot imposterà/aggiornare il timestamp sul vostro tabella pivot.