web-dev-qa-db-ja.com

Laravelブレードチェックforeach foreach

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
34
Sam

最良の結果を得るには、 documentation を確認してください。

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

配列が空かどうかを確認しようとしていると思います。次のようにすることができます。

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

参照isEmpty()

28
Kiran Subedi

存在する場合のデータのエコー

変数をエコーし​​たい場合もありますが、変数が設定されているかどうかはわかりません。これを次のような冗長PHPコードで表現できます。

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

ただし、Bladeでは、3項のステートメントを記述する代わりに、次の便利なショートカットが提供されます。

{{ $name or 'Default' }}

この例では、$ name変数が存在する場合、その値が表示されます。ただし、存在しない場合は、Wordのデフォルトが表示されます。

から https://laravel.com/docs/5.4/blade#displaying-data

4
Nabeel Shah

これは配列なので、==== ''は機能しません(===は空の文字列でなければならないことを意味します)。

count() を使用して、配列に要素があることを識別します(countは数値を返します。1以上はtrueと評価され、0 = falseと評価されます)。

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

Empty()を使用する必要があります

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

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

@endif

Countを使用できますが、配列が大きい場合は時間がかかります。空であるかどうかだけを知る必要がある場合は、emptyを使用するのが適切です。

2
iain

次のコードを使用すると、最初にlaravelディレクティブの@issetを使用して変数が設定されているかどうかを確認してから、laravelディレクティブの@unlessを使用して配列が空かどうかを確認できます

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

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

    @endunless
@else
    Not defined
@endif
0
user3216114

質問をよく理解していれば、これが私の最善の解決策です。

$object->first()メソッドを使用してifステートメント内のコードを1回、つまり最初のループで実行します。 $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