Tengo el siguiente Elocuente de consulta:

$item = Item::where('sku', $sku)->first();

Después de esta consulta viene voy a agregar una variedad de elementos manualmente, tales como:

$item['total'] = $item['subtotal'] + $this->currentInventory();

Declaraciones como la anterior que modificar el objeto de funcionar bien.

Deja de funcionar cuando hago lo siguiente:

$item['fields'] = [];

$fields = DB::table('item_fields')->where('item_id', $item['id'])->get();

foreach ($fields as $f) {
    if (!isset($item['fields'][$f->field_group_name]))
         $item['fields'][$f->field_group_name] = [];

    $item['fields'][$f->field_group_name]['valid_values'] = DB::table('item_field_valid_values')->where('item_field_id', $f->item_field_id);
}

Esto hará que la línea de $item['fields'][$f->field_group_name] = []; para producir el error:

Indirect modification of overloaded element of Item has no effect

¿Cómo puede ser que yo puede asignar $item['fields'] = [] pero cuando intento agregar un elemento real a la $item['fields'] matriz que me sale este error?

Versión de PHP 5.6.0.

InformationsquelleAutor eComEvo | 2015-01-09

1 Comentario

  1. 10

    Primero apagado, usted está perdiendo get() en su código, por lo que sea:

    1 recorre en iteración la Query\Builder en lugar de la matriz de resultados, debido a que nunca se ejecuta la consulta. (Supongo que se olvidó de que sólo aquí, porque de lo contrario, usted probablemente va a obtener trying to get property of non-object)

    o 2 una de las filas de la '' o null valor en el field_group_name columna.

    Es por eso que el código que hace esto:

    $item['fields'][NULL] = [];

    y que está causando Indirect modification ... error.

    Por lo que añadir el check de vacío de valor primera:

    if ($f->field_group_name && ! isset($item['fields'][$f->field_group_name]))
         $item['fields'][$f->field_group_name] = [];

    usted puede necesitar para que se ajuste a tus necesidades, pero usted consigue la idea.

    • Sí, me fui de la get() en este post. Fijo. Agrega un cheque, pero no los valores vacíos producir este error.
    • Me di cuenta de que si me cambio a llenar otra variable con los datos de campo (tales como $fields) y, a continuación, hacer $item['fields'] = $fields; después de completado el bucle, a continuación, que funciona bien. Esta es la solución que tenía que hacer, pero todavía estoy desconcertado por qué esto sería necesario en primer lugar.
    • Tal vez este es el caso de la stackoverflow.com/a/20053303/784588
    • Que puede ser. Parece ajuste de la solución tenía que hacer. Buen trabajo de detective!

Dejar respuesta

Please enter your comment!
Please enter your name here