Загруженное отношение Laravel, вызываемое динамически, не позволит ->count() при вызове в Blade, за исключением случаев, когда в @dd()?

#php #laravel #laravel-blade

Вопрос:

Немного странная проблема, я, вероятно, упускаю что-то очевидное.

У меня есть следующий объект:

 AppModelsCategory {#2253 ▼
   guarded: []
   timestamps: false
  #connection: "mysql"
  #table: "categories"
  #primaryKey: "id"
  #keyType: "int"
   incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
   exists: true
   wasRecentlyCreated: false
  #attributes: array:8 [▶]
  #original: array:8 [▶]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:3 [▼
    "children" => IlluminateDatabaseEloquentCollection {#2254 ▶}
    "translations" => IlluminateDatabaseEloquentCollection {#2212 ▶}
    "actions" => IlluminateDatabaseEloquentCollection {#2257 ▼
      #items: array:8 [▶]
    }
  ]
  #touches: []
  #hidden: []
  #visible: []
  #fillable: []
]
 

В блейде отношение (в данном случае «действия») вызывается динамически в цикле с использованием массива $type , который в этом случае возвращает actions , а затем возвращает счетчик.

 {{-- @dd($parent_category->{$type['name']}->count()) --}}

{{$parent_category->{$type['name']}->count()}}
      
 

В моем понимании это должно полностью сработать, за исключением того, что это приводит к ошибке: Call to a member function count() on null

Странно то, что если я проверю это с помощью комментария @dd, он полностью работает и возвращается 8 , как и должен!

Также, если я просто напишу, {{$parent_category->actions->count()}} это тоже сработает.

Я не понимаю, почему Блейд не соглашается {$type['name']} .

Ответ №1:

Как я понимаю, вы выполняете dd в цикле, и он возвращает 8 в первом цикле, но вы получаете ошибку при запуске кода без dd. Это означает, что иногда $parent_category->{$type['name']} значение равно нулю, и вы пытаетесь рассчитывать на нуль.

Может быть, вы можете попробовать с дополнительным():

 {{optional($parent_category->{$type['name']})->count()}}
 

Например, когда он равен нулю, он не будет пытаться считать, и вы больше не получите ошибку.