Проверить наличие коллекции - PullRequest
0 голосов
/ 26 мая 2020

У меня есть этот код:

@foreach($subCategories as $subCategory)
  <tr data-id="{{ $subCategory->id }}" id="{{ $subCategory->id }}" class="sortItem">
    <td class="text-left">
      {!! Str::limit($subCategory->category_name, 80, '...') !!}
      <p class="text-muted"></p>
    </td>
    <td class="text-center">
      @if ($subCategory->enable == 1)
        <span class="label font-weight-bold label-lg label-light-success label-inline">
          <i class="ft-thumbs-up"></i> aktywny
        </span>
      @else
        <span class="label font-weight-bold label-lg label-light-danger label-inline">
          <i class="ft-thumbs-down"></i> nieaktywny
        </span>
      @endif
    </td>
    <td class="text-center">
      <a href="{{ route('subcategory.index', ['parentId'=>$subCategory->id]) }}" class="badge badge-primary badge-md h-30px">
        <i class="ft-aperture"></i> Rozwiń
      </a>
      <a href="{{ route('subcategory.edit', ['id'=>$subCategory->id]) }}" class="badge badge-info badge-md h-30px">
        <i class="ft-aperture"></i> Edytuj
      </a>
      <form method="post" action="{{ route('subcategory.destroy', ['id'=>$subCategory->id, 'parentId'=>$parentId]) }}" class="d-inline-block" onSubmit="showAlert();{return false;}">
        @method('DELETE')
        {{ csrf_field()  }}
        <input type="submit" class="removeBtn" value="Usuń">
      </form>
    </td>
  </tr>
@endforeach

Иногда в приведенном выше коде возникает ошибка:

Попытка получить свойство id не-объекта (Просмотр: / var / www/resources/views/admin/categories/subcategory_list.blade.php)

Когда я отлаживаю, проблема заключается в том, что в моей подкатегории $ у меня есть:

App\Models\Category {#487 ▼
  #quarded: array:1 [▶]
  #fillable: array:11 [▶]
  +timestamps: false
  #connection: "mysql"
  #table: "categories"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:12 [▶]
  #original: array:12 [▶]
  #changes: []
  #casts: []
  #classCastCache: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  #hidden: []
  #visible: []
  #guarded: array:1 [▶]
  #pending: null
  #moved: false
}

Когда я отлаживаю:

Kalnoy\Nestedset\Collection {#487 ▼
  #items: array:3 [▼
    0 => App\Models\Category {#1423 ▶}
    1 => App\Models\Category {#1422 ▶}
    2 => App\Models\Category {#1426 ▶}
  ]
}

Этот код работает нормально.

Как я могу защитить свою функцию foreach, чтобы она не отображала ошибку?

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете проверить, имеет ли переменная $ subCategories счетчик больше, чем 0

@if($subCategories->count())
here goes your loop
@endif

Экземпляр коллекции laravel имеет метод с именем count . Вы можете проверить с ним длину коллекции и l oop над ней, только если он имеет как минимум 1. результат.

если $subCategories->count() возвращает 0, он интерпретирует его как FALSE и не будет введите код ниже. Как только $subCategories->count() станет больше 0, он станет истинным и выполнит код в операторе if. Если вам нужно больше объяснений, не стесняйтесь спрашивать.

...