it-swarm.com.de

Laravel prüfen, ob die Sammlung leer ist

Ich habe dies in meiner Laravel-Webapp erhalten:

@foreach($mentors as $mentor)
    @foreach($mentor->intern as $intern)
        <tr class="table-row-link" data-href="/werknemer/{!! $intern->employee->EmployeeId !!}">
            <td>{{ $intern->employee->FirstName }}</td>
            <td>{{  $intern->employee->LastName }}</td>
        </tr>
    @endforeach
@endforeach

Wie kann ich überprüfen, ob es $mentors->intern->employee gibt?

Wenn ich tue:

@if(count($mentors))

Es wird nicht geprüft.

26
Jamie

Sie können die Sammlung jederzeit zählen. Zum Beispiel gibt $mentor->intern->count() zurück, wie viele Praktikanten ein Mentor hat.

https://laravel.com/docs/5.2/collections#method-count

In Ihrem Code können Sie so etwas tun

foreach($mentors as $mentor)
    @if($mentor->intern->count() > 0)
    @foreach($mentor->intern as $intern)
        <tr class="table-row-link" data-href="/werknemer/{!! $intern->employee->EmployeeId !!}">
            <td>{{ $intern->employee->FirstName }}</td>
            <td>{{  $intern->employee->LastName }}</td>
        </tr>
    @endforeach
    @else
        Mentor don't have any intern
    @endif
@endforeach
18
otezz

Um festzustellen, ob Ergebnisse vorliegen, haben Sie folgende Möglichkeiten:

if ($mentor->first()) { } 
if (!$mentor->isEmpty()) { }
if ($mentor->count()) { }
if (count($mentor)) { }
if ($mentor->isNotEmpty()) { }

Notizen/Referenzen

->first()

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_first

isEmpty()https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_isEmpty

->count()

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_count

count($mentors) funktioniert, weil die Collection Countable und eine interne count () -Methode implementiert:

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_count

isNotEmpty()

https://laravel.com/docs/5.7/collections#method-isnotempty

Was Sie also tun können, ist:

if (!$mentors->intern->employee->isEmpty()) { }
69
Drudge Rajen

Ab Laravel 5.3 können Sie einfach Folgendes verwenden:

if ($mentor->isNotEmpty()) {
//do something.
}

Dokumentation https://laravel.com/docs/5.5/collections#method-isnotempty

16

Dies ist der schnellste Weg: 

if ($coll->isEmpty()) {...}

Andere Lösungen wie count leisten etwas mehr als Sie benötigen, was etwas mehr Zeit kostet. 

Außerdem beschreibt der Name isEmpty() genau, was Sie dort überprüfen möchten, damit Ihr Code besser lesbar ist. 

7
Csongor Halmai

Ich bevorzuge

(!$mentor)

Ist effektiver und genauer

0
Marcello Patto

Von php7 können Sie Null Coalesce Opperator verwenden:

$employee = $mentors->intern ?? $mentors->intern->employee

Dies gibt Null oder den Mitarbeiter zurück.

0
d.raev