2013-06-12 16 views
27

Questo è per l'app interna, la sicurezza dell'assegnazione di massa non è un problema in questo caso.Come: assegnare un aggiornamento di massa in Laravel 4?

Ho a che fare con campi di moduli molto grandi (numerosi), quindi l'assegnazione di massa delle modifiche dell'utente sarebbe ottima. L'assegnazione di massa sembra funzionare bene con 'create()' ma non con un salvataggio di find &.

Questo è quello che ho:

$post_data = Input::all(); 
$formobj = HugeForm::find($id); 
$formobj->save($post_data); 

Come posso fare su di esso? Preferirei non specificare molte dozzine di input di form.

risposta

47

Si dovrebbe essere in grado di utilizzare fill(array $attributes) ...

$post_data = Input::all(); 
$formobj = HugeForm::find($id); 
$formobj->fill($post_data); 
$formobj->save(); 
+0

Tnx bud, che ha funzionato. – mangonights

+0

Molto difficile trovare informazioni sul metodo di riempimento in qualsiasi punto della documentazione ... – happyhardik

+0

È ancora nella [documentazione dell'API per 5.2] (https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model .html # method_fill), ci sono molte cose che non sono incluse nella documentazione di base, forse potresti consigliare ai manutentori di aggiungerlo? –

19

In caso di massa aggiornarlo potrebbe scrivere ancora più breve.

$post_data = Input::all(); 
HugeForm::find($id)->update($post_data); 
+1

'update' non creerà nuovi record mentre il metodo' save' creerà una nuova riga se non esiste già e aggiornerà quelli esistenti. – Wistar

+2

Penso che lo scopo principale dell'aggiornamento() sia aggiornare le righe esistenti ... – insign

1

Per consentire l'assegnazione di massa entro laravel è necessario aggiungere:

protected $guarded = array(); 

nel modello. Fondamentalmente questo dice laravel non proteggere tutti i campi, si potrebbe anche usare:

protected $fillable = array(); 

E poi impostare i campi che si desidera essere compilabile.

Spero che questo aiuti

Problemi correlati