Подтвердить что ты не робот

Лезвие лезвия

Я хочу проверить, пуст ли мой foreach пуст, поэтому базовая разметка html не отображается без результатов внутри. Я пытаюсь обернуть его в оператор if, а затем, если он пуст, ничего не делайте в цикле foreach.

@if ($status->replies === '')

@elseif
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>
@endif

@if (!(empty($status->replies))
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <div class="media">
            <a class="pull-left" href="{{ route('profile.index', ['username' => $reply->user->username]) }}">
                <img class="media-object" alt="{{ $reply->user->getNameOrUsername() }}" src="{{ $reply->user->getAvatarUrl() }}">
            </a>
            <div class="media-body">
                <h5 class="media-heading"><a href="{{ route('profile.index', ['username' => $reply->user->username]) }}">{{ $reply->user->getNameOrUsername() }}</a></h5>
                <p>{{ $reply->body }}</p>
                <ul class="list-inline list-replies">
                    <li>
                        <a href="{{ route('status.like', ['statusId' => $reply->id]) }}"><i class="fa fa-thumbs-up"></i></a>
                    {{ $reply->likes->count() }} {{ str_plural('like', $reply->likes->count()) }}</li>
                    <li>{{ $reply->created_at->diffForHumans() }}</li>
                </ul>
            </div>
            <hr>
        </div>
    @endforeach
</div>
@endif
4b9b3361

Ответ 1

Проверьте документацию для лучшего результата:

@forelse($status->replies as $reply)
    <p>{{ $reply->body }}</p>
@empty
    <p>No replies</p>
@endforelse

Ответ 2

Я думаю, вы пытаетесь проверить, пуст ли массив или нет. Вы можете сделать вот так:

@if(!$result->isEmpty())
     // $result is not empty
@else
    // $result is empty
@endif

Ссылка isEmpty()

Ответ 3

Эховые данные, если оно существует

Иногда вам может потребоваться повторить переменную, но вы не уверены, была ли установлена ​​переменная. Мы можем выразить это в подробном PHP-коде, например:

{{ isset($name) ? $name : 'Default' }}

Однако вместо написания тройного утверждения Blade предоставляет вам следующее удобное сокращение:

{{ $name or 'Default' }}

В этом примере, если существует переменная $name, ее значение будет отображаться. Однако, если он не существует, будет отображаться слово Default.

От https://laravel.com/docs/5.4/blade#displaying-data

Ответ 4

Это массив, поэтому ==== '' не будет работать (value === означает, что оно должно быть пустой строкой.)

Используйте count(), чтобы идентифицировать массив, имеет какие-либо элементы (count возвращает число, 1 или более, будет оцениваться как true, 0 = false.)

@if (count($status->replies) > 0)
 // your HTML + foreach loop
@endif

Ответ 5

Вы должны использовать empty()

@if (!empty($status->replies)) 

<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>

@endif

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

Ответ 6

Это мое лучшее решение, если я хорошо понял вопрос:

Использование метода $object->first() для запуска кода внутри оператора if один раз, то есть в первом цикле. То же самое относится и к $object->last().

    @if($object->first())
        <div class="panel user-list">
          <table id="myCustomTable" class="table table-hover">
              <thead>
                  <tr>
                     <th class="col-email">Email</th>
                  </tr>
              </thead>
              <tbody>
    @endif

    @foreach ($object as $data)
        <tr class="gradeX">
           <td class="col-name"><strong>{{ $data->email }}</strong></td>
        </tr>
    @endforeach

    @if($object->last())
                </tbody>
            </table>
        </div>
    @endif

Ответ 7

Используя следующий код, можно сначала проверить, установлена ли переменная или нет, используя @isset директивы laravel, а затем проверить, что массив пуст или не использует @unless из директивы laravel.

@if(@isset($names))
    @unless($names)
        Array has no value
    @else
        Array has value

        @foreach($names as $name)
            {{$name}}
        @endforeach

    @endunless
@else
    Not defined
@endif