¿El método de relleno en Laravel no funciona?

Estoy aprendiendo a usar el framework Laravel, pero estoy teniendo problemas con el llenado de un Modelo. Aquí está mi código:

El Event modelo:

 <?php class Event extends Eloquent { //Some functions not used yet } 

Y aquí está el código en el controlador:

 $event = new Event(); $event->fill(array('foo', 'bar')); print_r($event->attributes); 

Entonces, ¿por qué print_r está mostrando una matriz vacía?

Los atributos son una propiedad protegida. Use el método $ obj-> getAttributes () .

Actualmente. al principio, debe cambiar el nombre del modelo de Event a otra cosa, Laravel tiene una clase Facade como Illuminate\Support\Facades\Event por lo que podría ser un problema.

En cuanto al método de fill , debe pasar una matriz asociativa para fill método como:

 $obj = new MyModel; $obj->fill(array('fieldname1' => 'value', 'fieldname2' => 'value')); 

Además, asegúrese de tener una propiedad protected $fillable ( verificación de asignación masiva ) declarada en su Model con nombres de propiedad que pueden llenarse. También puede hacer lo mismo al inicializar el Model :

 $properties = array('fieldname1' => 'value', 'fieldname2' => 'value'); $obj = new ModelName($properties); 

Finalmente, llama:

 // Instead of attributes dd($obj->getAttributes()); 

Porque los attributes son una propiedad protegida.

También asegúrese de que la propiedad $ rellenable esté definida en su clase de modelo. Por ejemplo, en su nuevo modelo renombrado:

 /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['field1', 'field2']; 

Si no tiene $ $ rellenables o $ guardado definidos en su Modelo, fill () no establecerá ningún valor. Esto es para evitar que el modelo se asigne en masa. Consulte “Asignación masiva” en los documentos de Laravel Eloquent: http://laravel.com/docs/5.1/eloquent .

Al completar los atributos, asegúrese de usar una matriz asociativa:

 $event->fill(array('field1' => 'val1', 'field2' => 'val2')); 

Una forma útil de depurar y verificar todos tus valores:

 //This will var_dump the variable's data and exit the function so no other code is executed dd($event); 

¡Espero que esto ayude!

Use una matriz de clave / valor en el relleno:

Un ejemplo:

 $book->fill(array( 'title' => 'A title', 'author' => 'An author' )); 

En Laravel 5.x,

Cuando quieres crear una nueva fila:

 $model = App\ModelName::create($arr); 

Cuando quieres actualizar una fila existente:

 $model = App\ModelName::find($id); $model->fill($arr); 

Todos los atributos rellenables existen en la variable modelo $fillable .