2017-11-03 4 views
-1

Ich möchte etwas anzeigen, wenn Avatar-Datensatz in meiner Datenbank nicht existiert. Ich benutze die leere() Funktion, aber es funktioniert nicht. Es zeigt img und alt = "avatar" an, selbst wenn der Avatar null ist. Kann jemand helfen?Wenn leer funktioniert nicht in Laravel Klinge

@foreach ($users as $user) 
     <tr> 
      <td class="user-table-information"> 

       @if(!empty($user->user_data->where('user_id', $user->id)->avatar)) 
       <i class="fa fa-user"></i>  
       @else 

       @foreach($user->user_data as $data) 
       <img src="{{ asset('/storage/uploads/avatars/'. $data->avatar) }}" class="avatar" alt="avatar"> 
       @endforeach 
       @endif 
       </td> 
+1

Wie werden Sie Ihre '$ Benutzer' Daten zu bekommen. Die Tatsache, dass du '-> wo tun musst ('user_id', $ user-> id)' zeigt an, dass etwas nicht stimmt – apokryfos

+1

'$ user-> user_data-> where ('user_id', $ user-> id)' Du Wahrscheinlich müssen Sie '-> first()' before '-> avatar' für 'empty' hinzufügen, um richtig zu funktionieren. –

+0

Soooo, vielleicht verpasse ich etwas, aber meinst du nicht, 'leer()' anstelle von 'zu verwenden! leer() '? Wie in, zeigen Sie den Platzhalter, wenn der Avatar * leer ist? Sieht so aus, als wäre deine Logik rückwärts. –

Antwort

0

Sie können stattdessen isEmpty() verwenden. Siehe Beispiel unten:

@if(!$someDBcollection->isEmpty()) 
echo "its not empty"; 
@endif 
0

Das fühlt sich einfach wie Sie nicht genug (Abfrage klug) vor dem Blade Senden ... ist user_data eine Sammlung getan haben (sieht aus wie es ist), und wenn ja, es sieht aus wie Sie haben eine Sammlung für einen Benutzer, der alle Benutzer Avatare enthält!

Denken Sie müssen nur Ihre auf einer früheren Abfrage tun Begrenzung .. Im einige Dinge vermuten würde, aber ...

In Ihrem Controller:

$ users = User :: mit (‘ user_data ') -> all();

oder noch besser, wenn es nur der Avatar Pfad ist Sie brauchen, und sie müssen separate Modelle sein, verwenden Sie einfach eine Beziehung ...

$users = User::with('avatar')->all(); 

class Avatar() 
{ 
    ... some stuff here 

    public function relativePath() 
    { 
     return "/storage/uploads/avatars/" . $this.filename; 
    } 

    public function user() 
    { 
     return $this->belongsTo('App\User') 
    } 

} 

public class User() { .. . some stuff

public function avatar() 
{ 
    return $this->hasOne('App\Avatar'); 
} 

}

Dann einfach als verwenden:

<img src="{{ $user->avatar->relativePath() }}"/> 

Wie ich schon sagte, seine eine abstrakte Antwort, aber mit wenig Informationen zu gehen, hoffentlich ich in der Lage gewesen, eine Antwort von Sorten zu geben :)