php666
@php666
PHP-макака

Метод toArray возвращает лишь первый уровень вложенности?

Что я делаю не так?
В модели:
class DocumentType extends Model
{
    protected $fillable = [
        'id',
        'code',
        'name',
        'active',
    ];

    public $childs;

Вызываю:
print_r(DocumentType::getTree());
Результат:
Illuminate\Database\Eloquent\Collection Object
(
    [items:protected] => Array
        (
            [0] => App\Models\Docflow\DocumentType Object
                (
                    [fillable:protected] => Array
                        (
                            [0] => id
                            [1] => code
                            [2] => name
                            [3] => active
                        )

                    [childs] => Illuminate\Support\Collection Object
                        (
                            [items:protected] => Array
                                (
                                    [7] => App\Models\Docflow\DocumentType Object  .............

Если так:
print_r(DocumentType::foo()->toArray());
возвращаемый результат:
Array
(
    [0] => Array
        (
            [id] => 6
            [parent_id] => 2
            [code] => 
            [name] => Приказ на переводе на другую должность
            [active] => 1
        )

Почему свойство childs не присутствует в результирующем массиве и почему оно не преобразовано в массив?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Потому что сериализуется то, что в $this->attributes и в $this->relations*. Про то, что вы какое-то там свойство добавили классу, Laravel ничего не знает и хотите вы его сериализовывать или нет - тоже. Кроме исходников, полезно ещё читать документацию.

P.S. children, не childs.

* на самом деле логика сложнее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы