У меня есть ошибка после удаления элемента из массива laravel eloquent
В отеле есть номера
foreach ($property->rooms as $key => $room) { if ($room->type == 1 and $type ==1 and $room->price < $price->min or $room->price > $price->max) { print_r($property->rooms); unset($property->rooms[$key]); //$array = array_values($property->rooms); doesn't work print_r($property->rooms); } }
Когда я кодирую это в json, массив преобразуется в объект, а не в массив
Перед отключением
Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( [0] => Room Object ( [table:protected] => rooms [fillable:protected] => Array ( [0] => properties_id [1] => price [2] => is_available [3] => type [4] => description ) [connection:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 1 [properties_id] => 4 [price] => 450000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-20 22:27:44 [type] => 1 [description] => ) [original:protected] => Array ( [id] => 1 [properties_id] => 4 [price] => 450000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-20 22:27:44 [type] => 1 [description] => ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 ) [1] => Room Object ( [table:protected] => rooms [fillable:protected] => Array ( [0] => properties_id [1] => price [2] => is_available [3] => type [4] => description ) [connection:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 2 [properties_id] => 4 [price] => 350000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-21 18:13:15 [type] => 1 [description] => ) [original:protected] => Array ( [id] => 2 [properties_id] => 4 [price] => 350000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-21 18:13:15 [type] => 1 [description] => ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 ) [2] => Room Object ( [table:protected] => rooms [fillable:protected] => Array ( [0] => properties_id [1] => price [2] => is_available [3] => type [4] => description ) [connection:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 3 [properties_id] => 4 [price] => 250000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 0000-00-00 00:00:00 [type] => 1 [description] => ) [original:protected] => Array ( [id] => 3 [properties_id] => 4 [price] => 250000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 0000-00-00 00:00:00 [type] => 1 [description] => ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 ) )
)
После отмены
Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( [1] => Room Object ( [table:protected] => rooms [fillable:protected] => Array ( [0] => properties_id [1] => price [2] => is_available [3] => type [4] => description ) [connection:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 2 [properties_id] => 4 [price] => 350000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-21 18:13:15 [type] => 1 [description] => ) [original:protected] => Array ( [id] => 2 [properties_id] => 4 [price] => 350000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 2014-10-21 18:13:15 [type] => 1 [description] => ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 ) [2] => Room Object ( [table:protected] => rooms [fillable:protected] => Array ( [0] => properties_id [1] => price [2] => is_available [3] => type [4] => description ) [connection:protected] => [primaryKey:protected] => id [perPage:protected] => 15 [incrementing] => 1 [timestamps] => 1 [attributes:protected] => Array ( [id] => 3 [properties_id] => 4 [price] => 250000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 0000-00-00 00:00:00 [type] => 1 [description] => ) [original:protected] => Array ( [id] => 3 [properties_id] => 4 [price] => 250000 [is_available] => 1 [created_at] => 0000-00-00 00:00:00 [updated_at] => 0000-00-00 00:00:00 [type] => 1 [description] => ) [relations:protected] => Array ( ) [hidden:protected] => Array ( ) [visible:protected] => Array ( ) [appends:protected] => Array ( ) [guarded:protected] => Array ( [0] => * ) [dates:protected] => Array ( ) [touches:protected] => Array ( ) [observables:protected] => Array ( ) [with:protected] => Array ( ) [morphClass:protected] => [exists] => 1 ) )
)
преобразованный в json, поле комнат должно быть массивом, а не объектом:
{"other_parameters": "something","rooms":{"1":{"id":2,"properties_id":4,"price":350000,"is_available":1,"created_at":"-0001-11-30 00:00:00","updated_at":"2014-10-21 18:13:15","type":1,"description":null},"2":{"id":3,"properties_id":4,"price":250000,"is_available":1,"created_at":"-0001-11-30 00:00:00","updated_at":"-0001-11-30 00:00:00","type":1,"description":""}}}
Я нашел решение в документации laravel.
после изменения массива вам нужно вызвать метод из коллекции laravel с именем values (), который упорядочивает индексы массива, например:
unset($property->rooms[$key]); $property->rooms->values();
неunset($property->rooms[$key]); $property->rooms->values();
Опция 1
$array = array(); foreach ($property->rooms as $key => $room) { if ($room->type == 1) { unset($property->rooms->{$key}); <<-- pay attention to this } else { $array[] = get_object_vars($room); // sort the passed row into new array } } print_r($array);
не$array = array(); foreach ($property->rooms as $key => $room) { if ($room->type == 1) { unset($property->rooms->{$key}); <<-- pay attention to this } else { $array[] = get_object_vars($room); // sort the passed row into new array } } print_r($array);
Вариант 2
Чтобы преобразовать из JSON в Array, установите флаг assoc в TRUE :
json_decode('Your json script', true); foreach ($property['rooms'] as $key => $room) { if ($room['type'] == 1) { unset($property['rooms'][$key]); } } $array = array_values($property['rooms']); print_r($array);
неjson_decode('Your json script', true); foreach ($property['rooms'] as $key => $room) { if ($room['type'] == 1) { unset($property['rooms'][$key]); } } $array = array_values($property['rooms']); print_r($array);